コマンドの出力がstderrまたはstdoutにありません。

コマンドの出力がstderrまたはstdoutにありません。

私はこの質問を偶然見つけましたが、これがどのように可能であるか疑問に思います。

標準実行コマンド:

# 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

リバースgrep? sed?ティー? ! ? ! ? ! ! ?

# 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

標準出力の標準エラー?

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

本当に混乱しています...

答え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に送信され、その後正常にリダイレクトできます。

関連情報