Stavo solo eseguendo alcuni comandi in un terminale e ho iniziato a chiedermi, Unix/Linux prende scorciatoie durante l'esecuzione di comandi in pipe?
Ad esempio, supponiamo che io abbia un file con un milione di righe, le prime 10 delle quali contengono hello world
. Se esegui il comando grep "hello world" file | head
il primo comando si interrompe non appena trova 10 righe o continua a cercare prima l'intero file?
Risposta accettata:
Una specie di. La shell non ha idea di cosa faranno i comandi che stai eseguendo, si limita a collegare l'output di uno all'input dell'altro.
Se grep
trova più di 10 righe che dicono "hello world", quindi head
avrà tutte e 10 le linee che vuole e chiuderà il tubo. Ciò causerà grep
da uccidere con un SIGPIPE, quindi non è necessario continuare la scansione di un file molto grande.