回答:
&
中には、2>&1
単に数がと言っている1
ファイル記述子ではなくファイル名です。この場合、standard output file descriptor
。
を使用する2>1
場合、これはエラーをというファイルにリダイレクトします1
が、使用する場合2>&1
はstandard output stream
。
これは&>
、両方を送って、と言うstandard output
とstandard error
、どこか。たとえば、ls <non-existent_file> &> out.file
。例でこれを説明しましょう。
セットアップ:
koko
次の内容のファイルを作成します。
#!bin/bash
ls j1
echo "koko2"
実行可能にする: chmod u+x koko
j1
存在しないことに注意してください
今すぐ実行 ./koko &> output
実行cat output
すると表示されます
ls: cannot access 'j1': No such file or directory
koko2
standard error
(ls: cannot access 'j1': No such file or directory
)とstandard output
(koko2
)の両方がファイルに送信されましたoutput
。
もう一度実行しますが、今回は次のようになります。
./koko > output
しcat output
、あなただけのkoko2
ように表示されます。ただし、ls j1
コマンドからのエラー出力ではありません。これはstandard error
、端末に表示される場所に送信されます。
@Byte Commanderに感謝します:
command >file 2>&1
リダイレクトの順序が重要であることに注意してください。command 2>&1 >file
代わりに書く場合(通常はあなたが望むものではありません)、最初にコマンドstdout
をファイルにリダイレクトし、その後コマンドstderr
を現在未使用stdout
にリダイレクトしますので、端末に表示され、パイプまたはリダイレクトすることができます繰り返しますが、ファイルには書き込まれません。
command >file 2>&1
リダイレクトの順序が重要であることに注意してください。command 2>&1 >file
代わりに書く場合(通常はあなたが望むものではありません)、最初にコマンドのstdoutをファイルにリダイレクトし、その後コマンドのstderrを現在使用されていないstdoutにリダイレクトしますので、端末に表示され、パイプすることができますまたは再度リダイレクトしますが、ファイルには書き込まれません。
standard output
あなたの端末に表示される場所に送信されます。」これは「に」ではないstandard error
ですか?
これ[n]>&word
は、出力ファイル記述子の複製と呼ばれます(POSIX Shell Language Standardのセクション2.7.6を参照)。この特定の動作には、ボーンのようなシェルの機能でありksh
、dash
とbash
。実際、標準はBourneシェルとに基づいていksh
ます。tcshとcshのマニュアルを見ると、明らかにファイル記述子を複製する機能は提供されていませんが、の説明から>&
、これは次のように動作&>
しますbash
(つまり、エラーと通常の出力をファイルにリダイレクトします)。
Ubuntuを含む* nixのようなシステムでは、すべてがファイル、またはファイル記述子であるとよく耳にします。標準出力が一定のファイルディスクリプタ1と標準誤差は、ファイル記述子である2だから、> FILE 2>&1
技術的に他の言葉ではファイルディスクリプタ1上に重複するファイルディスクリプタ2を意味し、この答えは:
2>&1は、シェルに、記述子1の複製であるファイル記述子2をコマンドに与えるように指示します(つまり、stderrとstdoutは同じfdを指します)。
ここで重要なのは、最初に記述子1を設定する必要があることに注意することです。左から右の順にシェルプロセスのリダイレクトので、command >FILE 2>&1
用のReWire stdoutにシェルを伝えcommand
に行くFILE
最初の、そして唯一の後、記述子2は、同じ場所に1と2点である1のコピー、になることができます- FILE
。
もちろん、これは標準エラーと標準出力を超えています。この答えに示されているように、3&>2
...ファイル記述子3に(dup2)ファイル記述子2を複製します。ファイル記述子3が既に開いている場合は閉じます。
多くの場合、ファイル記述子を操作する例は、コマンドの出力を変数にキャプチャすることですdialog
また、&>
に固有であることに注意してくださいbash
。ではzsh
この、同じ動作をしますが、ドキュメントによると、「... MULTIOSの存在下で『>単語2>&1』と同じ効果を持っていません」。POSIX準拠では/bin/sh
、これはコマンドをバックグラウンドに置く通常のリダイレクトとして扱われます。また、構文的に有効なbashコードではないshコードはありますか?。
こちらもご覧ください:
&>
意味ですか?