Output del comando non in stderr né in stdout


15

Mi sono imbattuto in questo problema, quindi mi chiedo come sia possibile?

Esecuzione standard del comando:

# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14
info from server: "Processed 0 Failed 1 Total 1 Seconds spent 0.000017"
sent: 1; skipped: 0; total: 1

OK, proviamo a ottenere solo la prima riga:

# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head -1
sent: 1; skipped: 0; total: 1

Che dire della testa standard?

# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head 
sent: 1; skipped: 0; total: 1

Grep inverso? sed? tee?!?!?!!?

# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | grep -v pero
sent: 1; skipped: 0; total: 1

# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | sed 's/foo/bar/'
sent: 1; skipped: 0; total: 1

# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | tee
sent: 1; skipped: 0; total: 1

stderr a stdout?

# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 2>&1 | tee
sent: 1; skipped: 0; total: 1

Sono davvero perplesso ...


Cosa ti aspettavi tee? Cosa succede se corri zabix_sender <options> 2>&1 | head -1?
terdon

Risposte:


15

Ciò può accadere se l'applicazione sta scrivendo direttamente su TTY anziché su STDOUT o STDERR.

Puoi giocare con questo comportamento confrontando i 2 esempi seguenti

( echo foo ) &>/dev/null
( echo foo > $(tty) ) &>/dev/null

Nota che il primo non mostra nulla, ma il secondo. Questo perché abbiamo inviato l'output direttamente a tty e bypassato il reindirizzamento a /dev/null.

Puoi aggirare roba del genere usando script

script -c '( echo foo > $(tty) ) &>/dev/null'  >/dev/null

Fondamentalmente l' scriptutilità crea un falso tty e avvia il comando in quel tty. Qualsiasi output dal comando viene inviato a STDOUT che è possibile reindirizzare normalmente.


Grazie per il puntatore a "script"! Questa è esattamente la cosa di cui avevo bisogno per aggirare l'insistenza testarda di gpg / gpg2 sul non leggere da stdin.
Eric

Grazie. Ci sono voluti un po 'di ricerche per arrivare qui. Incredibile che sia una domanda così impopolare (ho a che fare con VLC).
Paul

script: illegal option -- c:( Ci sono altre soluzioni alternative che conosci?
Aaron
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.