GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Debian – Warum umschließt „ls“ plötzlich Elemente mit Leerzeichen in einfachen Anführungszeichen?

Ich habe das gerade auf einem meiner Rechner (auf dem Debian Sid läuft) bemerkt, wenn ich ls eingebe Jeder Dateiname mit Leerzeichen wird in einfache Anführungszeichen gesetzt.

Ich habe sofort meine Aliase überprüft, nur um sie intakt zu finden.

[email protected]:~/testdir$ ls
'test 1.txt'  test1.txt
[email protected]:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
[email protected]:~/testdir$

(Bild)

Ein weiterer Test mit Dateien, die einfache Anführungszeichen in ihren Namen enthalten (auch als Antwort auf eine Anfrage von jimmij):

[email protected]:~/testdir$ ls
'test 1.txt'  test1.txt  'thishasasinglequotehere'''.txt'
[email protected]:~/testdir$ touch "'test 1.txt'"
[email protected]:~/testdir$ ls
''''test 1.txt''''  test1.txt
'test 1.txt'          'thishasasinglequotehere'''.txt'

(Bild)

Update mit neuer Ausgabe von coreutils-8.26 (was zugegebenermaßen viel weniger verwirrend, aber immer noch irritierend ist, standardmäßig zu haben). Danke an Pádraig Brady für diesen Ausdruck:

$ ls
"'test 1.txt'"   test1.txt
'test 1.txt'    "thishasasinglequotehere'.txt"

$ ls -N
'test 1.txt'  test1.txt
test 1.txt    thishasasinglequotehere'.txt

Warum passiert dies? Wie stoppe ich es richtig?

zur verdeutlichung habe ich selbst ls auf automatische farbausgabe eingestellt. Es hat noch nie Dinge in Anführungszeichen gesetzt.

Ich verwende bash und coreutils 8.25.

BEARBEITEN:
Anscheinend dachten die Coreutils-Entwickler (Link), es wäre eine gute Idee, dies zu einem globalen Standard zu machen, obwohl sie gegen das Prinzip des geringsten Erstaunens sowie über 46 Jahre UNIX-Tradition verstoßen.

Gibt es eine Möglichkeit, dies ohne Neukompilierung zu beheben?

UPDATE – Oktober 2017 – Debian Sid hat das Shell-Escape-Quoting standardmäßig wieder aktiviert. Das wird gerade lächerlich. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

Und am Ende der Antwortkette auf den vorherigen Fehlerbericht steht:„Die Änderung war beabsichtigt und wird bleiben.“ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

Ich dachte, das sei geklärt. Anscheinend nicht.

UPDATE:April 2019:Ich habe gerade einen falschen Fehlerbericht in PHP gefunden, der durch diese Änderung an ls verursacht wurde . Wenn Sie Entwickler verwirren und falsche Fehlerberichte generieren, ist es an der Zeit, Ihre Änderungen zu überdenken.

Update:Android-Spielzeugkiste ls macht jetzt etwas Ähnliches, aber mit Backslashes anstelle von Anführungszeichen. Mit der Option -q werden Leerzeichen als „Fragezeichen“ dargestellt (ich habe nicht überprüft, was sie sind, da es sich offensichtlich nicht um Leerzeichen handelt). Die einzige Lösung, die ich bisher gefunden habe, ohne das betreffende Gerät zu rooten, ist das Hinzufügen dies in ein Skript und beziehen Sie es beim Starten einer Shell. Diese Funktion macht ls Verwenden Sie Spalten, wenn Sie sich in einem Terminal befinden, und geben Sie andernfalls eine pro Zeile aus, während Sie ls austricksen wörtlich in Leerzeichen gedruckt, weil es durch eine Röhre läuft.

ls() {
    # only way I can stop ls from escaping with backslashes
    if [ -t 1 ]; then
        /system/bin/ls -C [email protected] |cat
    else
        /system/bin/ls [email protected] |cat
    fi
}

Akzeptierte Antwort:

Vorwort :Auch wenn es ziemlich befriedigend sein kann, eine Antwort wie diese hochzustimmen und Schluss damit zu machen, seien Sie bitte versichert, dass sich die GNU-Coreutils-Betreuer nicht um SO-Antwortstimmen kümmern, und das wenn Sie wirklich wollen um sie zur Änderung zu ermutigen , müssen Sie ihnen eine E-Mail senden wie diese Antwort beschreibt.

Aktualisierung 2019 :
Irgendwann im vergangenen Jahr haben sich die Betreuer verdoppelt und bieten jetzt allen [E-Mail-geschützten] Berichten zu diesem Problem nur eine Standardantwort an, die auf eine unglaublich lange Seite auf ihrer Website verweist, die Probleme auflistet, die Menschen mit dieser Änderung haben zu deren Ignorierung sie sich verpflichtet haben.
Der unaufhörliche Druck von [E-Mail-geschützten] Berichten hat sich eindeutig ausgewirkt, die Erstellung dieser riesigen und absurden Seite erzwungen und möglicherweise die Anzahl der Betreuer, die bereit sind, sich mit dem Problem zu befassen, auf nur einen reduziert.
Wenn so viele Leute etwas für einen Fehler halten, dann ist es ein Fehler, ob die Betreuer anderer Meinung sind oder nicht.
Versenden Sie weiterhin E-Mails bleibt der einfachste Weg, Veränderungen zu fördern.

Warum passiert das?

Verwandte:Kontinuierliches Lesen aus Named Pipe (cat oder tail -f)?

Mehrere Coreutils-Betreuer entschieden, dass sie es besser wussten als jahrzehntelange De-facto-Standards.

Wie stoppe ich es richtig?

http://www.gnu.org/software/coreutils/coreutils.html:

Fehlerberichte

Wenn Sie der Meinung sind, dass Sie einen Fehler in Coreutils gefunden haben, senden Sie bitte einen so
vollständigen Fehlerbericht wie möglich an <[email protected]> , und es
wird automatisch in den Coreutils-Bugtracker eingetragen. Bevor
Fehler gemeldet werden, lesen Sie bitte die FAQ. Eine sehr nützliche und oft zitierte
Anleitung zum Schreiben von Fehlerberichten und zum Stellen guter Fragen ist das
Dokument How To Ask Questions The Smart Way . Sie können frühere
Beiträge durchsuchen und das bug-coreutils-Archiv durchsuchen.

Distributionen, die bereits zurückgesetzt wurden diese Änderung:

  • Debian coreutils-8.25-2
    • Einschließlich folglich vermutlich Ubuntu und all der Hunderte von Debian-basierten und Ubuntu-basierten Derivaten

Nicht betroffene Distributionen:

  • openSUSE (bereits verwendet -N)

Irgendeine Möglichkeit, dies ohne Neukompilierung zu beheben?

Befürworter würden Sie haben ...

kehren Sie zum alten Format zurück, indem Sie -N zu ihrem ls-Alias ​​hinzufügen

…bei all Ihren Installationen, überall, für den Rest der Ewigkeit.


Debian
  1. So sichern Sie MySQL-Datenbanken mit mylvmbackup auf Debian Squeeze

  2. Sichern Sie Debian mit ClamAV Antivirus

  3. Warum wird bei der Verwendung von Anführungszeichen ein einzelner umgekehrter Schrägstrich angezeigt?

  4. Probleme mit der Erweiterung von Bash-Variablen mit einfachen Anführungszeichen

  5. sed ersetzt alle Tabulatoren und Leerzeichen durch ein einzelnes Leerzeichen

Chrooting von Apache 2.4 mit mod_unixd auf Debian 8 (Jessie)

Installieren Sie WordPress 5 mit Apache auf Debian 9

So installieren Sie Debian 11 (Bullseye) mit Screenshots

Ersteinrichtung des Servers mit Debian 11

So konfigurieren Sie LAMP mit Debian 11

So konfigurieren Sie Samba Server mit Debian 11