Warum packt ls einige Dateinamen in einfache Anführungszeichen?

824
Hashim

Ich habe festgestellt, dass lsin einem Terminal einige Dateinamen in einfache Anführungszeichen eingeschlossen sind und andere nicht.

Ich mag nicht, wie das aussieht, denn ich bevorzuge es, dass meine Terminalausgänge schön und einheitlich sind. Wodurch wird diese Funktion verursacht und kann sie sicher deaktiviert werden?

Warum packt ls einige Dateinamen in einfache Anführungszeichen?

2

1 Antwort auf die Frage

4
Hashim

Warum werden lseinige Dateinamen in einfache Anführungszeichen gesetzt?

Was hier passiert, ist, dass lseinzelne 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 coreutilsAnfang 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 lsLook 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 coreutilsPaket eingeführt wurde - von dem praktisch jede Linux-Distribution abhängig ist und zu dem lsein 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 coreutilsEntwickler 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 lsVerhalten, mit dem sie sich früher verhalten haben, ordnungsgemäß wiederhergestellt wird, theoretisch ausreichen sollte, um die coreutilsEntwickler zu überzeugen, der Linux-Community zuzuhören.

Im kurzfristigen, pragmatischen Sinne gibt es mehrere Möglichkeiten, um lsdas Verhalten der Version 8.25 vor Version 8.25 wiederherzustellen, indem alle Ausgaben intakt bleiben. Im Folgenden sind drei Methoden für die bashShell aufgeführt.


Wiederherstellen lsdes Verhaltens der Version 8.25

Legen Sie die QUOTING_STYLEUmgebungsvariable literalin Ihrer ~/.bashrcDatei fest

Suchen Sie Ihre ~/.bashrcDatei 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 bashTerminals 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 -NSchalter von 8.25 verwendet . Von ls --help:

-N, --Literal Druckeintragsnamen ohne Anführungszeichen

Fügen Sie dazu der ~/.bashrcDatei 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 -NBefehlszeilenschalter (nur für den aktuellen Lauf)

Wenn Sie coreutilsdas neue Standardverhalten vorziehen, es jedoch vorübergehend umgehen möchten, können Sie den -NSchalter auch direkt in einem Befehl verwenden:

ls -N 
Es war nicht meine Absicht, passiv-aggressiv zu sein, aber da Sie meinen Kommentar als solchen wahrgenommen haben, war ich vielleicht auch so. Ich entschuldige mich dann, Kommentar gelöscht. Ich habe die Antwort und die Frage wirklich auf den Punkt gebracht, das heißt, ich denke, dass sie hier auf SU nützlich sind. Kamil Maciorowski vor 5 Jahren 1