回答:
>演算子は、通常、出力をファイルにリダイレクトしますが、デバイスに出力することもできます。>>を使用して追加することもできます。
数値を指定しない場合、標準出力ストリームが想定されますが、エラーをリダイレクトすることもできます
> file
stdoutをファイルに
1> file
リダイレクトstdoutをファイルに
2> file
リダイレクトstderrをファイルに
&> file
リダイレクトstdoutとstderrをファイルにリダイレクト
/dev/null
nullデバイスであり、必要な入力を取得して破棄します。出力を抑制するために使用できます。
2>&1
古い構文があるとは思わ&>
ないので、何年も前には機能しなかったでしょうが、両方とも同等です。
つまり、stderr
ブラックホールにリダイレクト(fd 2)します(コマンドの出力を破棄します)。
リダイレクトの一般的な使用例:
command > /dev/null 2>&1 &
command
バックグラウンドで実行し、破棄stdout
してstderr
command >> /path/to/log 2>&1 &
command
stdoutとstderrを実行してログファイルに追加します。
Bash 4+では、より短い(ただし読みにくい)フォームが機能します
command &>> /path/to/log
> /dev/null 2>&1
代わりに使用する正当な理由はあり&> /dev/null
ますか?
&>
はBash 4の新機能であり、前者は従来の方法に過ぎません。私はそれに慣れています(覚えやすい)。
&> /dev/null
一部のシェルでは動作しないかもしれないが、>を/ dev / null 2>&1は、すべてのPOSIX互換のシェルで動作します。
fn>target
ところ、fn
ファイル番号である(0-2は、一般的に、一部のプログラムは、より多くの数字を定義)とtarget
接頭辞で-通常はファイル名ですが、ここで、別のファイル番号で&
あります「ファイル名の代わりにファイル番号が必要」の構文。
/dev/null
Linux / Unixではブラックホールとして扱われるため、これに何かを入れることはできますが、から戻すことはできません/dev/null
。
さらに、2>
つまり>
、stderr(つまり2
)をブラックホール(つまり/dev/null
)にリダイレクトしていることを意味します
あなたのコマンドは:
grep -i 'abc' content 2>/dev/null
このような別のスラッシュで終了しようとしないでください- 2>/dev/null/
(ディレクトリではありません)。
grep -i 'abc'コンテンツは、エラーを含むコンソールに表示される出力を生成します。
指定2>/dev/null
するとエラーが除外され、コンソールに出力されなくなります。
より詳細には:2はエラー記述子を表し、エラーが書き込まれます。デフォルトでは、コンソールに出力されます。
\>
この場合、指定された場所に出力をリダイレクトします /dev/null
/dev/null
無視する出力を送信する標準のLinuxデバイスです。
> /dev/null 2>&1
あります&> /dev/null