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.