Je pense que j'oublie peut-être un point relativement fondamental concernant le shell. Sortie du ls La commande par défaut sépare la sortie avec des retours à la ligne, mais le shell affiche la sortie sur une seule ligne.
Quelqu'un peut-il m'expliquer cela? J'avais toujours supposé que la sortie était simplement séparée par des espaces, mais maintenant que je vois la sortie séparée par des retours à la ligne, je m'attendrais à ce que la sortie s'affiche sur des lignes séparées.
Exemple :
[email protected]:~/lpi103-4$ ls text*
text1 text2 text3
od montre que la sortie est séparée par des retours à la ligne :
[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
Si des retours à la ligne sont présents, alors pourquoi la sortie ne s'affiche-t-elle pas comme :
text1
text2
text3
Réponse acceptée :
Lorsque vous dirigez la sortie, ls
agit différemment.
Ce fait est caché dans la documentation d'information :
Si la sortie standard est un terminal, la sortie est en colonnes (triées verticalement) et les caractères de contrôle sont sortis sous forme de points d'interrogation ; sinon, la sortie est listée une par ligne et les caractères de contrôle sont sortis tels quels.
Pour le prouver, essayez de courir
ls
puis
ls | less
Cela signifie que si vous voulez que la sortie soit garantie d'être un fichier par ligne, qu'il soit canalisé ou redirigé, vous devez exécuter
ls -1
(-1
est le numéro un)
Ou, vous pouvez forcer ls | less
afficher en colonnes en exécutant
ls -C
(-C
est un C majuscule)