La redirection vers l'arrière est-elle la même chose qu'un tuyau?

11

Sous Linux si vous tapez

sort < txtfile

est-ce la même chose que

cat txtfile | sort
tony_sid
la source

Réponses:

17

À votre question de titre: Non. Obtenir à stdinpartir du contenu d'un fichier ( redirection d'entrée ) n'est pas la même chose que diriger la sortie d'un programme vers l'entrée d'un autre programme.

Mais, puisque votre catimprime simplement le contenu d'un fichier, le résultat est effectivement le même dans cet exemple.


Mais même juste ce qui suit produit des résultats très différents:

$ cat * | sort
$ sort < *

S'il y a plus d'un fichier correspondant, ce dernier produira

-bash: *: ambiguous redirect

car il n'est tout simplement pas aussi flexible que le premier, qui capturera tous les fichiers correspondants et les dirigera en entrée sort.

Daniel Beck
la source
3
Et ... sort *? Pas d'utilisation inutile de chat, pas d'utilisation inutile d'indirection, le plus court à taper, le plus facile à penser, et je pense que le tri GNU vous offrira des optimisations d'évolutivité pour les très gros fichiers (pas si sûr - la moitié se souvient de quelque chose là-bas)
sehe
1
@sehe Probablement. Je viens d'utiliser l'exemple pour montrer que les deux sont différents. Il ne s'agit pas d'une utilisation efficace du tri. Le tri est plus flexible que cela, bien sûr.
Daniel Beck
@DanielBeck, En ce qui concerne l'efficacité, est sort < txtfilebeaucoup plus efficace que cat txtfile | sort?
Pacerier