J'exécutais juste quelques commandes dans un terminal et j'ai commencé à me demander si Unix/Linux prend-il des raccourcis lors de l'exécution de commandes canalisées ?
Par exemple, disons que j'ai un fichier avec un million de lignes, dont les 10 premières contiennent hello world . Si vous exécutez la commande grep "hello world" file | head la première commande s'arrête-t-elle dès qu'elle trouve 10 lignes ou continue-t-elle d'abord à rechercher dans tout le fichier ?
Réponse acceptée :
Sorte de. Le shell n'a aucune idée de ce que feront les commandes que vous exécutez, il connecte simplement la sortie de l'une à l'entrée de l'autre.
Si grep trouve plus de 10 lignes qui disent "hello world" puis head aura les 10 lignes qu'il veut et fermera le tuyau. Cela causera grep être tué avec un SIGPIPE, il n'a donc pas besoin de continuer à analyser un très gros fichier.