staging.inyokaproject.org

Anzeige von Dateinamen mit Leerzeichen in der Shell

Status: Ungelöst | Ubuntu-Version: Kubuntu 18.04 (Bionic Beaver)
Antworten |

moonwalker3

Anmeldungsdatum:
30. Juni 2008

Beiträge: 802

Wenn ich in der Bash ein ls eingebe, dann werden die Dateien, die ein Leerzeichen enthalten, mit einfachen Anführungszeichen am Anfang und Ende angezeigt, also ungefähr so:

dateiname.txt
'das ist eine datei.txt'

Habe ich irgendeine Einstellung verändert, oder was ist da los? Wie kann ich das ändern?

coram

Anmeldungsdatum:
17. Januar 2015

Beiträge: 645

Das Setzen der Anführungszeichen lässt sich per Option -N abstellen:

$ ls -N
Datei mit Leerzeichen.txt

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@moonwalker3: Was gibt denn type ls aus?

moonwalker3

(Themenstarter)

Anmeldungsdatum:
30. Juni 2008

Beiträge: 802

Marc_BlackJack_Rintsch schrieb:

@moonwalker3: Was gibt denn type ls aus?

ls ist ein Alias von »ls --color=auto«.

wie kann ich ls -N standardmäßig einstellen?

steamywindows

Avatar von steamywindows

Anmeldungsdatum:
5. Mai 2018

Beiträge: 45

Du könntest in der .bashrc in Deinem home-Verzeichnis einen alias eintragen.

1
vi ~/.bashrc

zum Beispiel (ggf. um weitere Optionen ergänzt): alias ls='ls -N'

moonwalker3

(Themenstarter)

Anmeldungsdatum:
30. Juni 2008

Beiträge: 802

Hat sich das mit dem Update auf 18.04 geändert, oder warum war das vorher anders?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

moonwalker3 schrieb:

[…] warum war das vorher anders?

Diese Frage beantwortet der Befehl:

ls --version 

Bei Ubuntu 18.04 erhält man

ls (GNU coreutils) 8.28
…

während z.B. Ubuntu 16.04 die Version 8.25 verwendet.

coram

Anmeldungsdatum:
17. Januar 2015

Beiträge: 645

kB schrieb:

Diese Frage beantwortet der Befehl:

ls --version 

Bei Ubuntu 18.04 erhält man

ls (GNU coreutils) 8.28
…

während z.B. Ubuntu 16.04 die Version 8.25 verwendet.

Wenn ich das richtig sehe, wurden die Anführungszeichen allerdings bereits in Version 8.25 eingeführt, wie sich den Release Notes der coreutils entnehmen lässt:

ls now quotes file names unambiguously and appropriate for use in a shell, when outputting to a terminal.

Bemerkenswert ist übrigens, dass die Anführungszeichen, wie es das Zitat nahelegt, nur bei direkter Ausgabe in ein Terminal gesetzt werden. Wird die Ausgabe in eine Datei umgeleitet, entfallen die Anführungszeichen:

ls > ls.txt

Dies gilt sogar bereits etwa für:

ls | cat

oder

ls | less

moonwalker3

(Themenstarter)

Anmeldungsdatum:
30. Juni 2008

Beiträge: 802

coram schrieb:

Bemerkenswert ist übrigens, dass die Anführungszeichen, wie es das Zitat nahelegt, nur bei direkter Ausgabe in ein Terminal gesetzt werden. Wird die Ausgabe in eine Datei umgeleitet, entfallen die Anführungszeichen:

Handelt es sich um eine unüberlegte Neuerung? hmmm

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Und was macht die Shell, wenn Anführungszeichen, oder nennen wir sie Apostrophe, Teil des Dateinamens sind?

1
2
3
touch "gif tig"
touch "'gif tig'"
ls

Eine bessere Lösung wäre vielleicht farbige Schrift zu verwenden oder einen kursiven Font. ☺

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@moonwalker3: Handelt es sich um eine überlegte Neuerung? hmmm

@user_unknown: Bessere Lösung für was? Das Ziel ist doch, dass man einen Dateinamen aus dem Terminal einfach kopieren und wieder einfügen kann, auch wenn er Leerzeichen enthält, und ohne das man ihn danach in der Shell noch mal nachbearbeiten muss um ihn in einem Shellbefehl verwenden zu können. Was passiert wenn Anführungszeichen im Namen enthalten sind:

1
2
3
4
$ ls --quoting-style=shell O*
'O'\''Reilly Bücherliste.txt'
$ ls --quoting-style=literal O*
O'Reilly Bücherliste.txt

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

user_unknown schrieb:

Und was macht die Shell,

Die Shell macht hier gar nichts. Vielmehr geht es hier um das Verhalten des Programmes ls aus den GNU coreutils.

wenn Anführungszeichen, oder nennen wir sie Apostrophe, Teil des Dateinamens sind?

ls liefert der Shell (!) eine gequotete Anzeige von problematischen Dateinamen und verwendet dazu die drei bekannten und von der Shell vorgesehenen Möglichkeiten '…' oder "…" oder \… in einer zweckmässigen Kombination. Die angezeigte Version den Dateinamens kann man in der Shell direkt per Copy 'n Paste zur Selektion der Datei mit dem problematischen Namen verwenden. Wenn man dieses Verhalten nicht möchte, kann man es – wie oben schon beschrieben - abschalten.

Antworten |