
私は何を知っている
program > /dev/null 2>&1
する。これは、出力が送信されたのと同じ場所に出力をリダイレクトし、エラー出力を意味します/dev/null
。2>&1
私の問題は覚えていないので、常にGoogleに検索する必要があるということです。
だから私は試しています... &2>1
Googleで検索するまですべての組み合わせを試してみます...1>2&
1>&2
覚えやすくするためのヒントは何ですか?
答え1
エラーよりも出力が優先されるため、出力が優先されます(1対2)。
>
「行く」の略です。左は私が送りたい内容で、右は私が送りたいところです。 「where」は(ほぼ)常にファイルなので、次のようになります。
program > /dev/null 2>1
名前1のファイルにリダイレクトされます。したがって、&記号は(&)
ファイルをファイル記述子に変更します。
残念ながら、私は自分のニーモニックに触れたり開発したことがありませんが、* nixを初めて学ぶときにこの論理的アプローチがうまく機能することがわかりました。何度練習すれば第2の天性になります。
答え2
1つの秘訣は、1 =標準出力、2 =標準エラーを覚えることです。だから:
2>&1
=標準エラーストリームは標準出力ストリームに移動します。
1>&2
=その逆。
Cに似た言語でプログラムしたことがあれば、アンパサンド()を覚えやすいです&
。私は、ファイル自体を変更したり、新しいファイルを生成しないように、既存のファイル記述子を参照する「アドレス」と考えることにしました。
答え3
結び目と考えることが&
役に立ちます。何をしたいのかを考え、出力2を取り出して2>
1にまとめるだけです。2>&1
答え4
次の3つのオプションを考えてみましょう。
program 2>1
program 2>1&
program 2>&1
1 つ目は、stderr をファイル名 "1" に送信します。結局、bashはファイルへのリダイレクトを期待します。
2番目のファイルも同じファイルにリダイレクトされますが、program
バックグラウンドで実行されます。これはまさに後続を&
意味します。
これは、bashの世界で意味のあるファイルハンドルへの唯一のリダイレクトで、3番目の可能性を残します。
0、1、2のどちらを覚えていますか?コンソールでコンピュータを実行してみてください。まず、何かを入力する必要があります(0 = stdin)。これにより、出力(1 = stdout)が表示されます。最後に、問題が発生した場合にのみstderr(2)が表示されます。