web-dev-qa-db-ja.com

"2>&1"はコマンドラインで何をしますか?

>記号がコマンドラインでの出力のリダイレクトに使用されていることはわかっていますが、コマンドラインでの2>&1の使用を説明する何かを見つけるのに問題があります。例えば:

curl http://www.google.com > /dev/null 2>&1 &
59
Matt Huggins

1は標準出力(stdout)を表します。 2は標準エラー(stderr)を表します。

そのため、2>&1は、標準出力がリダイレクトされるところまで標準エラーを送るように言っています。これは/dev/nullに送られてきたので、出力をまったく無視するようなものです。

77
Chealion

2はSTDERRを参照します。 2>&1はSTDERRを1(STDOUT)と同じ場所に送信します。

5
John T

私は次のように理解しています:

画面上のコマンドの出力およびエラー情報のみを読み取りたい場合は、次のように書きます:curl http://www.google.com

また、後で確認するために出力情報を端末画面ではなくファイルに保存したい場合は、次のように記述できます:curl http://www.google.com > logfile

ただし、>はStdOutをlogfileにリダイレクトするだけなので、この方法では、StdErr情報は省略されます。

したがって、実行に失敗したコマンドのエラー情報を気にする場合は、2>&1(StdErrをStdOutにフォールドすることを意味する)を使用してStdOutとStdErrを組み合わせる必要があるため、次のコマンドラインを記述できます。 curl http://www.google.com > logfile 2>&1

0
YaOzI