Warum werden ls
einige Dateinamen in einfache Anführungszeichen gesetzt?
Was hier passiert, ist, dass ls
einzelne Anführungszeichen um Dateinamen mit Leerzeichen eingeschlossen werden, um zuzulassen, dass die Dateinamen sofort in einen anderen Befehl oder ein anderes Skript kopiert werden (dh ohne sie zu beschädigen):
Dies war ein äußerst unpopuläres Feature , das coreutils
Anfang 2016 in der Version 8.25 des Pakets eingeführt wurde, wobei nur drei Entwickler übereinstimmten.
Kritiker der Änderung zitieren die Argumente, dass die Ausgabe von ls
Look wesentlich unansehnlicher wird, unnötig von fast einem halben Jahrhundert Unix-Tradition abweicht und aufgrund der Art und Weise, wie sie implementiert wurde (Opt-out statt Opt-In), die Kompatibilität bricht mit seit langem bestehenden Skripten und Dienstprogrammen.
Da das Feature in das coreutils
Paket eingeführt wurde - von dem praktisch jede Linux-Distribution abhängig ist und zu dem ls
ein Teil gehört - wirkt sich die Änderung auf jedes vorstellbare Linux- oder Linux-ähnliche System aus, von Arch Linux bis Cygwin.
Im Falle von Debian und von Debian abgeleiteten Distributionen wie Ubuntu wurde die Änderung nach erheblichen Protesten wieder rückgängig gemacht, bevor sie im Oktober 2017 erneut eingesetzt wurde .
Wie diese Antwort deutlich macht, ist der beste Weg, Ihre Enttäuschung über diese Änderung zu registrieren, die coreutils
Entwickler direkt über einen Fehlerbericht zu kontaktieren und (höflich) zu argumentieren, dass sie einen großen Fehler gemacht haben. Gemäß dem Open-Source-Ethos sollte eine kritische Masse von Nutzern, die respektvoll, aber unnachgiebig darauf bestehen, dass das ls
Verhalten, mit dem sie sich früher verhalten haben, ordnungsgemäß wiederhergestellt wird, theoretisch ausreichen sollte, um die coreutils
Entwickler zu überzeugen, der Linux-Community zuzuhören.
Im kurzfristigen, pragmatischen Sinne gibt es mehrere Möglichkeiten, um ls
das Verhalten der Version 8.25 vor Version 8.25 wiederherzustellen, indem alle Ausgaben intakt bleiben. Im Folgenden sind drei Methoden für die bash
Shell aufgeführt.
Wiederherstellen ls
des Verhaltens der Version 8.25
Legen Sie die QUOTING_STYLE
Umgebungsvariable literal
in Ihrer ~/.bashrc
Datei fest
Suchen Sie Ihre ~/.bashrc
Datei in Ihrem HOME-Ordner ( /home/yourusername
) und fügen Sie die folgende Zeile hinzu:
export QUOTING_STYLE=literal
Speichern Sie die Datei. Die Änderung sollte sofort auf alle neuen bash
Terminals angewendet werden, die Sie öffnen.
Sie können auch ausführen source ~/.bashrc
, damit die Änderungen in alle Terminalfenster verschoben werden, die zum Zeitpunkt der Änderung geöffnet waren.
Erstellen Sie einen Alias für ls -N
Wenn Sie Aliase gegenüber Umgebungsvariablen bevorzugen, können Sie auch einen Alias erstellen .bashrc
, der den neuen -N
Schalter von 8.25 verwendet . Von ls --help
:
-N, --Literal Druckeintragsnamen ohne Anführungszeichen
Fügen Sie dazu der ~/.bashrc
Datei die folgende Zeile hinzu und speichern Sie sie:
alias ls="ls -N"
Ausführen source ~/.bashrc
, damit die neue Änderung auf alle geöffneten Terminals übertragen wird.
Verwenden Sie den -N
Befehlszeilenschalter (nur für den aktuellen Lauf)
Wenn Sie coreutils
das neue Standardverhalten vorziehen, es jedoch vorübergehend umgehen möchten, können Sie den -N
Schalter auch direkt in einem Befehl verwenden:
ls -N