Inutile d'utiliser de chat?

C'est probablement dans de nombreux Faq - au lieu d'utiliser:

cat file | command

(qui est appelé inutile l'utilisation de chat), de manière correcte censé être:

command < file

Dans la 2e, la "bonne" façon - système d'exploitation n'ont pas à se frayer un supplément de processus.

En sachant que, j'ai continué à utiliser inutiles chat pour 2 raisons.

  1. plus esthétique - j'aime quand les données sont transférées de manière uniforme à partir de la gauche vers la droite. Et il est plus facile de remplacer cat avec quelque chose d'autre (gzcat, echo, ...), d'ajouter un 2ème fichier ou insérez un nouveau filtre (pv, mbuffer, grep ...).

  2. J'ai "senti" qu'il pourrait être plus rapide dans certains cas. Plus rapide car il y a 2 processus, 1er (cat) la lecture et la deuxième n'a quoi que ce soit. Et ils peuvent s'exécuter en parallèle, ce qui signifie parfois plus rapide d'exécution.

Est ma logique correcte (pour la 2ème raison)?

  • cat est une identité pipe. Il ne ruisseaux de son entrée à sa sortie. Si le deuxième programme de la chaîne peut prendre son entrée à partir de la même argument que vous passez à cat (ou de l'entrée standard, si vous ne transmettez pas d'argument), puis cat est absolument inutile, et seuls les résultats dans un processus supplémentaire d'être fourchue et un tuyau en cours de création.
  • quand le chat n'a pas d'arguments ou de son argument est -, c'est une identité, d'une pipe. Quand il a plus d'un non-dash argument filename il devient quelque chose de plus qu'une identité, d'une pipe, si, et commence à servir un but réel.
  • vrai, la concaténation, mais encore certains programmes se comportent de la même façon (head, tail, grep). Peut-être que je devrais avoir dit arguments, pluriel 🙂
  • L'ancien populaire lien partmaps.org est malheureusement mort. Le contenu est maintenant au porkmail.org/era/unix/award.html
  • Connexes: qu'est-Ce que le consensus général sur “Inutile l'utilisation de chat”?
  • Voir aussi: unix.stackexchange.com/q/511827/20336