La sortie de ls(sans arguments) semble séparer les noms de fichiers avec des sauts de ligne.
Preuve:
ls | grep foofonctionne comme prévu, avec legreptraitement de chaque nom de fichier comme une ligne d'entrée distincte.ls > files.txt; vim files.txt-> dans Vim, chaque fichier est sur une ligne distincte
Et pourtant, dans le terminal, la sortie de lsmet plusieurs fichiers sur une seule ligne, en séparant les noms de fichiers avec des espaces pour créer des colonnes bien alignées:
$ ls
a.txt b.txt c.txt
Donc ma question est, comment ça marche?
Utilise-t-il un caractère de contrôle spécial pour «simuler» une nouvelle ligne? Ou sait-il quand sa sortie est redirigée vers une autre commande et formater sa sortie différemment dans ce cas?
lsutilise pour déterminer si la sortie est un terminalisatty(3).