私はこのようなコマンドを理解しようとしています
[command] > /dev/null 2>&1
私が正しく理解した場合、コマンドの出力は(ファイル記述子2)にリダイレクトされ、次に/dev/null
(ファイル記述子1)にリダイレクトされます。stderr
stdout
最終結果は[command]
エラーのみが出力されることです。
これを理解するために、次のコマンドを実行しました。
bash-3.2$ echo "Hello World" 1>&2
Hello World
ここでは「Hello World」をエコーしてリダイレクトしますstderr
。次に、次のコマンドを実行します。
bash-3.2$ echo "Hello World" 1>&2 2>&1
Hello World
予想通りstderr
にリダイレクトしています。stdout
Hello World
今私はこれを実行します
bash-3.2$ echo "Hello World" 1>&2 1>&1
Hello World
私が望むのは、出力を印刷することですstdout
。しかし。stdout
stderr
それでは、なぜ印刷するのですかHello World
?何も印刷されないと思いました。
答え1
echo "Hello World" 1>&2 1>&1
ファイル記述子1(標準出力)をファイル記述子2(標準エラー)が指す場所にリダイレクトし、ファイル記述子1を自分にリダイレクトします。したがって、すべての出力は標準エラーに移動しますが、それを変更しませんでした。したがって、すべての出力は現在の端末に移動します。
何も印刷したくない場合は、標準エラーをリダイレクトする必要があります。
(echo "Hello World" 1>&2 1>&1) 2> /dev/null
または等しく、
echo "Hello World" 2>/dev/null 1>&2
あなたの解釈
[command] > /dev/null 2>&1
不正確:> /dev/null
標準出力をにリダイレクト/dev/null
し、標準エラーを現在指している標準出力にリダイレクトします/dev/null
。したがって、すべての出力が削除されます。
バラよりシェルの制御およびリダイレクト演算子は何ですか?もっと学ぶ。