私はこの問題に遭遇したので、これはどのように可能ですか?
コマンドの標準的な実行:
# 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
では、最初の行だけを取得してみましょう。
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head -1
sent: 1; skipped: 0; total: 1
標準ヘッドはどうですか?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head
sent: 1; skipped: 0; total: 1
逆グレップ?セド?ティー?!?!?!!?
# 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
stdoutからstdoutへ?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 2>&1 | tee
sent: 1; skipped: 0; total: 1
私は本当に困惑しています...
これは、アプリケーションがSTDOUTまたはSTDERRではなくTTYに直接書き込んでいる場合に発生する可能性があります。
以下の2つの例を比較することで、この動作を試すことができます
( echo foo ) &>/dev/null
( echo foo > $(tty) ) &>/dev/null
最初のものは何も表示していませんが、2つ目は表示しています。これは、出力をttyに直接送信し、/dev/null
へのリダイレクトをバイパスしたためです。
script
を使用すると、このようなものを回避できます
script -c '( echo foo > $(tty) ) &>/dev/null' >/dev/null
基本的に、script
ユーティリティは偽のttyを作成し、そのttyでコマンドを起動します。コマンドからの出力はすべてSTDOUTに送信され、通常どおりリダイレクトできます。