Bashスクリプトがあります。
#!/bin/bash
echo this should be visible only in the stderr output but it is not 1>&2
exit 0
また、このスクリプトを実行するカスタムアプリケーションもあります。アプリケーションは標準出力と標準エラーをキャプチャします。標準出力は空で、標準エラーには提供されたテキストが含まれています。今まではそんなに良くなった。ただし、コンソール(物理端末)でスクリプトを実行すると、次のようになります。
./my_script.sh
ディスプレイに何も印刷されないと予想しましたが、印刷されました。 、>&2
など、さまざまなリダイレクトの組み合わせを試しましたが、>/dev/stderr
結果は同じです。また、stdoutをnullにリダイレクトしようとしましたが、1>&2 >/dev/null
明らかに私のテキストもnullに送信します。
これはどこで構成されていますか?端末でstderrの表示を停止するにはどうすればよいですか?
ベストアンサー1
スクリプトが標準エラーストリームを端末に送信しないようにするには、スクリプトをファイルに/dev/null
リダイレクトする必要があります。
コマンドラインからリダイレクトされた標準エラーストリームを使用してスクリプトを呼び出すか、スクリプト自体にエラーストリームをリダイレクトさせることでこれを実行できます。
エラーストリームをコマンドライン/dev/null
にリダイレクトするには、次のようにスクリプトを呼び出します。
./my_script 2>/dev/null
スクリプトが標準エラーストリームを自動的に削除するようにするには、/dev/null
スクリプト内でストリームをリダイレクトします。
#!/bin/bash
# Discard any diagnostic output, errors, and interactive prompts.
exec 2>/dev/null
echo 'This should not be visible.' >&2
echo 'This should be visible.'
/dev/null
診断出力を渡すファイルのパス名に変更します。
/dev/null
標準エラーストリームをファイルにリダイレクトしたり、標準エラーストリームをファイルにリダイレクトしても、標準出力ストリームは影響を受けません。
通常、スクリプトはexit 0
。