stdout
以下のコマンドを使用して、既存のファイルに蓄積され、他のファイルにエラーメッセージを送信するコマンドを実行しようとします。
commmand >> /home/user/accumulate_output.log 2>& /home/user/error.log
このエラーメッセージが表示されます。
bash: /home/user/error.log :ambiguous redirect
正しい構文は何ですか?
答え1
2>&1
これはエラーストリームをstdoutにリダイレクトすることを意味し、&
文字自体はそれほど意味がありません。ファイル記述子の数を提供するのを待っていますが、ファイル名を指定することです。番号付きのファイル記述子ではなくファイルにリダイレクトしたいので
commmand >> /home/user/accumulate_output.log 2>/home/user/error.log
stdoutとstderrのファイル記述子を参照して、&1
「ファイル名」と考えることができます。これで、ファイル名の前に意味がないこと&2
がわかります。&
要約すると、構文はリダイレクトするファイル記述子n>&m
またはn>file
どこにあるか(指定されていない場合は標準出力を意味します)、右側ではファイル記述子または名前が..のファイルにリダイレクトできます。これは数値であり、ファイル記述子は次のようにする必要があることを意味します。n
n=1
m
file
m
-
閉鎖リダイレクトする代わりに(「どこにも」リダイレクトしない)
stdoutとstderrを同じ場所にリダイレクトする特別な構文もありますが、それはすべてです&>
。これは一般的な構文の一部ではないため、混乱するだけです。これは実際に両方のリダイレクトを同時に実行するショートカットです。