error=$(mkdir test 2>&1) この表現はどういう意味ですか?

error=$(mkdir test 2>&1) この表現はどういう意味ですか?

次のシェルスクリプトがあります。

error=$(mkdir test 2>&1)

エラーがあると、「error」変数がmkdirコマンドのエラー結果を得ることがわかりますが、2>&1がどのように機能するかを理解できません。誰かが説明できますか?ありがとうございます!

ベストアンサー1

文法

x="$(some_command)"

実行されsome_command出力返され、変数に保存されます"$x"

通常、プログラムは「標準出力」ストリーム(stdout、ファイルハンドル#1)に「通常出力」を送信し、「標準エラー」ストリーム(stderr、ファイルハンドル#2)にエラーメッセージを送信します。

リダイレクト2>&1の意味は(おおよそ、実際には少し複雑です)「送信stderr」を意味しますstdout。したがって、エラーメッセージと出力メッセージが混在します。

したがって、私たちは2つを組み合わせることができます:

x="$(some_command 2>&1)"

出力を返しますそしてエラーメッセージを入力してください$x

あなたの場合

error="$(mkdir test 2>&1)"

これは$error出力(空)とエラー(可能エラーが発生した場合は文字列が含まれます。)結果には $errorコマンドのエラーメッセージが含まれますmkdir

私たちはこれを実際に見ることができます。

$ error="$(mkdir /)"
mkdir: cannot create directory '/': File exists
$ echo "$error"

$ error="$(mkdir / 2>&1)"
$ echo "$error"
mkdir: cannot create directory '/': File exists

最初のケースでは、エラーメッセージがに送信されるとすぐに印刷され、stderr変数は空です。 2番目のケースでは、stderrをstdoutにリダイレクトしてキャプチャして変数に保存します$error

おすすめ記事