Penso che potrei trascurare un punto relativamente fondamentale riguardante la shell. Output da ls il comando per impostazione predefinita separa l'output con le nuove righe, ma la shell visualizza l'output su una singola riga.
Qualcuno può spiegarmi questo? Ho sempre pensato che l'output fosse semplicemente separato da spazi, ma ora che vedo l'output separato da nuove righe, mi aspetto che l'output venga visualizzato su righe separate.
Esempio:
[email protected]:~/lpi103-4$ ls text*
text1 text2 text3
od mostra che l'output è separato da nuove righe:
[email protected]:~/lpi103-4$ ls text* | od -c
0000000 t e x t 1 n t e x t 2 n t e x t
0000020 3 n
0000022
Se sono presenti nuove righe, perché l'output non viene visualizzato come:
text1
text2
text3
Risposta accettata:
Quando esegui il pipe dell'output, ls
agisce diversamente.
Questo fatto è nascosto nella documentazione informativa:
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 ei caratteri di controllo vengono emessi così come sono.
Per dimostrarlo, prova a correre
ls
e poi
ls | less
Ciò significa che se vuoi garantire che l'output sia un file per riga, indipendentemente dal fatto che venga reindirizzato o reindirizzato, devi eseguire
ls -1
(-1
è il numero uno)
Oppure puoi forzare ls | less
per produrre in colonne eseguendo
ls -C
(-C
è una C maiuscola)