Ich bin über dieses Problem gestolpert und frage mich, wie das möglich ist.
Standardmäßige Befehlsausführung:
# 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, versuchen wir nur die erste Zeile zu bekommen:
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head -1
sent: 1; skipped: 0; total: 1
Was ist mit Standardkopf?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head
sent: 1; skipped: 0; total: 1
Inverse grep? 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 zu stdout?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 2>&1 | tee
sent: 1; skipped: 0; total: 1
Ich bin wirklich verwirrt ...
tee
? Was passiert, wenn du rennstzabix_sender <options> 2>&1 | head -1
?Antworten:
Dies kann passieren, wenn die Anwendung anstelle von STDOUT oder STDERR direkt in das TTY schreibt.
Sie können mit diesem Verhalten spielen, indem Sie die 2 folgenden Beispiele vergleichen
Beachten Sie, dass der erste nichts anzeigt, der zweite jedoch. Das liegt daran, dass wir die Ausgabe direkt an das tty gesendet und die Umleitung an umgangen haben
/dev/null
.Mit können Sie solche Dinge umgehen
script
Grundsätzlich erstellt das
script
Dienstprogramm ein falsches tty und startet den Befehl in diesem tty. Jede Ausgabe des Befehls wird an STDOUT gesendet, das Sie dann wie gewohnt umleiten können.quelle
script: illegal option -- c
:( Gibt es andere Workarounds, die Sie kennen?