リダイレクトの使い方を覚えていますか?

リダイレクトの使い方を覚えていますか?

私は何を知っている

  program > /dev/null 2>&1 

する。これは、出力が送信されたのと同じ場所に出力をリダイレクトし、エラー出力を意味します/dev/null2>&1

私の問題は覚えていないので、常にGoogleに検索する必要があるということです。

だから私は試しています... &2>1Googleで検索するまですべての組み合わせを試してみます...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)が表示されます。

関連情報