Perché questo comando grep non funziona?


24

Quando provo ad usare grep in questo modo:

service --status-all | grep network

Elenca ancora tutti i servizi anche se l'ho inserito grepper limitarlo solo alla stringa "rete"


Dopo il fatto:

Ho notato questo articolo che spiega perché il comando si comporta in questo modo, ecco cosa mi piace di Linux, c'è sempre una buona ragione, ma non è necessario intuitivo

Risposte:


41

Provare:

service --status-all |& grep network

Le applicazioni della riga di comando possono stampare su due flussi di testo noti come standard out (stdout) e errore standard (stderr). Per impostazione predefinita, il terminale visualizza l'output per entrambi in modo identico.

Stdout viene dato il numero 1, e stderr viene dato il numero 2. Per impostazione predefinita, gli operatori di reindirizzamento, come >, |e <si applicano solo a stdout, il numero 1.

|&convoglia sia stdout che stderr insieme al processo sul flusso di input standard (stdin) di destra, che fa grepfunzionare come previsto.

Non so perché la service --status-allstampa su stderr qui, ma in generale, avere un flusso stderr separato è molto utile, in quanto ti consente di vedere gli errori anche quando stdout è messo a tacere.


Grazie per la risposta, sembra che questo abbia suscitato molto interesse. Quindi suppongo di non essere stato l'unico a risolvere questo problema.
Meer Borg,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.