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

Warum *nicht* `ls` parsen (und was stattdessen tun)?

Ich sehe immer wieder Antworten, die diesen Link zitieren, die eindeutig „Parse ls nicht !” Das stört mich aus mehreren Gründen:

  1. Es scheint, dass die Informationen in diesem Link ohne Frage pauschal akzeptiert wurden, obwohl ich beim gelegentlichen Lesen zumindest ein paar Fehler erkennen kann.

  2. Es scheint auch, als ob die in diesem Link genannten Probleme keinen Wunsch geweckt haben, eine Lösung zu finden.

Ab dem ersten Absatz:

…wenn Sie [ls] fragen für eine Liste
von Dateien gibt es ein riesiges Problem:Unix erlaubt fast jedes Zeichen in
einem Dateinamen, einschließlich Leerzeichen, Zeilenumbrüche, Kommas, Pipe-Symbole und
so ziemlich alles andere, was Sie tun würden Versuchen Sie jemals, es als Trennzeichen zu verwenden, außer
NUL. … ls trennt Dateinamen mit Zeilenumbrüchen. Das ist in Ordnung
bis Sie eine Datei mit einem Zeilenumbruch im Namen haben. Und da ich keine
Implementierung von ls kenne das es Ihnen erlaubt,
Dateinamen mit NUL-Zeichen anstelle von Zeilenumbrüchen zu beenden, so dass wir
keine Liste von Dateinamen sicher mit ls erhalten können .

Schade, oder? Wie immer Können wir einen aufgelisteten Datensatz mit Zeilenumbrüchen für Daten handhaben, die Zeilenumbrüche enthalten könnten? Nun, wenn die Leute, die Fragen auf dieser Website beantworten, so etwas nicht täglich tun würden, könnte ich denken, dass wir in Schwierigkeiten stecken.

Die Wahrheit ist jedoch, dass die meisten ls Implementierungen bieten tatsächlich eine sehr einfache API zum Analysieren ihrer Ausgabe, und wir alle haben dies die ganze Zeit getan, ohne es überhaupt zu merken. Sie können einen Dateinamen nicht nur mit null beenden, Sie können ihn auch mit null oder mit einer beliebigen anderen beliebigen Zeichenfolge beginnen. Darüber hinaus können Sie diese beliebigen Zeichenfolgen pro Dateityp zuweisen . Bitte beachten Sie:

LS_COLORS='lc=
Linux
  1. Was ist ein TAM und warum möchten Sie vielleicht einer werden?

  2. Howto:Was ist Git und Github? Wie verwende ich es und warum sollte es mich interessieren?

  3. Was bedeutet Env X=() { :;}; Command’ Bash Do und warum ist es unsicher?

  4. Warum Deis und was ist das?

  5. Warum sollte eval in Bash vermieden werden und was sollte ich stattdessen verwenden?

Was ist ein Chroot-Gefängnis und wie wird es verwendet?

Was ist eine virtuelle Maschine und warum sollte man sie verwenden?

Was sind Firefox Multi-Account-Container? Warum und wie wird es verwendet?

Was ist der Grep-Befehl unter Linux? Warum wird es verwendet und wie funktioniert es?

Was ist ein Homelab und warum sollten Sie eines haben?

Was ist die ONLYOFFICE Community-Funktion und warum sollten Sie sie verwenden?