回答:
>演算子は、通常、出力をファイルにリダイレクトしますが、デバイスに出力することもできます。>>を使用して追加することもできます。
数値を指定しない場合、標準出力ストリームが想定されますが、エラーをリダイレクトすることもできます
> filestdoutをファイルに
1> fileリダイレクトstdoutをファイルに
2> fileリダイレクトstderrをファイルに
&> fileリダイレクトstdoutとstderrをファイルにリダイレクト
/dev/nullnullデバイスであり、必要な入力を取得して破棄します。出力を抑制するために使用できます。
2>&1古い構文があるとは思わ&>ないので、何年も前には機能しなかったでしょうが、両方とも同等です。
つまり、stderrブラックホールにリダイレクト(fd 2)します(コマンドの出力を破棄します)。
リダイレクトの一般的な使用例:
command > /dev/null 2>&1 &
commandバックグラウンドで実行し、破棄stdoutしてstderr
command >> /path/to/log 2>&1 &
commandstdoutと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/nullLinux / 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