Qual è il separatore magico tra i nomi di file nell'output di ls?


20

L'output di ls(senza argomenti) sembra separare i nomi dei file con le interruzioni di riga.

Prova:

  • ls | grep foofunziona come previsto, greptrattando ogni nome di file come una riga di input separata.

  • ls > files.txt; vim files.txt -> in Vim, ogni file si trova su una riga separata

Eppure nel terminale l'output di lsmette più file su una riga, separando i nomi dei file con spazi per creare colonne ben allineate:

$ ls
a.txt  b.txt  c.txt

Quindi la mia domanda è: come fa?

Sta usando un carattere di controllo speciale per "falsificare" una nuova riga? O sa quando il suo output viene reindirizzato a un altro comando e in questo caso formattarlo in modo diverso?

Risposte:


24

O sa quando il suo output viene reindirizzato a un altro comando e in questo caso formattarlo in modo diverso?

Sì. Dal manuale completo (disponibile info lsse la documentazione è installata):

Se l'output standard è un terminale, l'output è in colonne (ordinate verticalmente) e i caratteri di controllo vengono emessi come punti interrogativi; in caso contrario, l'output viene elencato uno per riga e i caratteri di controllo vengono emessi così come sono.

Se ti piace l'output di una colonna, puoi eseguirlo

ls -1

per farlo anche nel terminal.


7
In particolare, la funzione lsutilizza per determinare se l'uscita è o meno un terminale isatty(3).
Blrfl,

Anche in qualche modo correlato, se si desidera testarlo in un semplice script di shell, è possibile eseguirlo tty -se verificarne lo stato di ritorno.
Daniel Andersson,

10

lslo rileva quando si esegue il pipe dell'output. Puoi vederlo nella documentazione:

Se l'output standard è un terminale, l'output è in colonne (ordinate verticalmente) e i caratteri di controllo vengono emessi come punti interrogativi; in caso contrario, l'output viene elencato uno per riga e i caratteri di controllo vengono emessi così come sono.

Se si desidera posizionare ciascun file nell'output su una riga separata indipendentemente dal reindirizzamento della pipe, è possibile utilizzare

ls -1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.