Bashコマンドの出力のサイレンシング

1. 概要

このクイックチュートリアルでは、Bashコマンドの出力を無音にする方法に焦点を当てます。

2. 前提条件

出力を黙らせる前に、まずコマンドの実行時にBashが出力を処理する方法を理解する必要があります。

2.1. 標準出力とエラー

Bashコマンドを実行すると、新しいプロセスが作成されます。 このプロセスからのエラーはエラーストリームに書き込まれ、その他の出力は出力ストリームに書き込まれます。
また、Bashは各プロセスに対して複数のファイルを自動的に開きます。これは、数値のファイル記述子(FD)で示されます。
これらのFDの2つは、標準出力(stdout)と標準エラー(stderr)です。 デフォルトでは、* Bashはエラーストリームをstderrに、出力ストリームをstdout *に送信します。 stdoutとstderrの両方について、これらのFDに書き込まれた文字は、コマンドが実行されたコンソールに表示されます。
さらに、* Bashは、stdout FDに_1_を、stderr FDに_2_の識別子を割り当てます。

2.2. 出力をリダイレクトする

コマンドの出力を別のFDにリダイレクトすることにより、エラーおよび出力ストリームのデフォルトの宛先を変更できます。 * https://www.gnu.org/software/bash/manual/html_node/Redirections.html [リダイレクト演算子]:> *を使用して出力をリダイレクトします。
たとえば、http://linuxcommand.org/lc3_man_pages/echoh.html [_echo_]コマンドを使用して、_Hello world_をファイル_foo.txt_に書き込むことができます。
echo "Hello world" > foo.txt

2.3. ヌルデバイス

さらに、Linuxシステムには特定のデバイス_ / dev / null_があり、書き込み時には何もしません。 したがって、* // dev / null_にリダイレクトされた出力はどこにも書き込まれません*。

3. サイレンシング出力

コマンドの出力を無音にするために、stdoutまたはstderr(あるいはその両方)を_ / dev / null_にリダイレクトします。 リダイレクトするストリームを選択するには、リダイレクト演算子にFD番号を提供する必要があります。

3.1. 標準出力

エラー以外の出力を抑制するために、stdoutを_ / dev / null_にリダイレクトします。
command 1> /dev/null
デフォルトでは、リダイレクト演算子はstdoutをリダイレクトするため、_1_を省略できます。
command > /dev/null

3.2. 標準誤差

エラー出力を抑制するために、stderrを_ / dev / null_にリダイレクトします。
command 2> /dev/null

3.3. すべての出力

stdoutとstderrの両方をリダイレクトするには、* stderrをstdoutにリダイレクトしてから、stdoutを_ / dev / null_ *にリダイレクトする必要があります。 stderrをstdoutにリダイレクトするには、次の表記を使用します。
2>&1
これを、stdoutを_ / dev / null_にリダイレクトすることと組み合わせて、すべての出力をサイレントにします。
command > /dev/null 2>&1
したがって、stdoutは_ / dev / null_にリダイレクトされ、stderrはstdoutにリダイレクトされ、両方のストリームが_ / dev / null_に書き込まれ、_command_からのすべての出力が抑制されます。
これを次のBash表記に短縮できます。
command &> /dev/null
*この略記は移植性がなく、Bash 4以降でのみサポートされています*。
一般的ではありませんが、stdoutとstderrを個別に_ / dev / null_にリダイレクトすることもできますが、Bashスクリプトを自動生成するか、以前のアプローチを使用できない場合を除き、このアプローチは推奨しません。
command > /dev/null 2> /dev/null

4. 結論

このチュートリアルでは、Bashプロセスがエラーおよび非エラー出力をFDにストリーミングする方法と、これらのストリームをリダイレクト演算子を使用して別のFDにリダイレクトする方法について学習しました。
リダイレクトを_ / dev / null_デバイスと組み合わせることにより、エラー出力、通常出力、またはその両方を黙らせることができます。