シェルスクリプト内で標準エラー出力をファイルにリダイレクトするコードを作成していたのですが、思ったように動作されていないため、私の認識がずれているかどうか確認したいため質問させていただきます。
#!/bin/bash echo "ERROR: This is error." 1>&2 2> ./sample_out.txt
上記のようなコードについて、エラー出力がファイルにリダイレクトされると思ったのですが、ターミナルに出力されてしまいました。
前提
私の認識が少しずれている気がするので確認いたします。
&1
… 現在、標準出力 (1) に割り当てられている出力先&2
… 現在、標準エラー出力 (2) に割り当てられている出力先1>&2
… 標準出力 (1) の出力先を &2 に切り替える2>&1
… 標準エラー出力 (2) の出力先を &1 に切り替える
(引用:https://maku77.github.io/p/q2k3j2h/)
このことから「標準エラー出力に出力を行うコマンド」は1>&2
であると判断しました。
また、2>
はファイル・ディスクリプター2が標準エラー出力として定義されていることから、標準エラー出力をファイルに書き込むリダイレクト方法とありました。
(引用:https://qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc)
実際に、意図的にエラー出力を吐くように作成した結果、エラー出力はリダイレクトされました。
ech "HELLO" 2> sample_out.txt
そのことから、
echo "ERROR: This is error." >&2 2> ./sample_out.txt
とすることで標準エラー出力がファイルにリダイレクトされるものと考えましたが、ターミナルに出力されてしまいました。
一方で
echo "ERROR: This is error." >&2 1> ./sample_out.txt
とするとしっかりファイルにリダイレクトされます。
私の認識のどこが間違っているのか教えていただきたいです。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー