Bashコマンドの出力をサイレンシングする
1. 概要
このクイックチュートリアルでは、Bashコマンドの出力を無音にする方法に焦点を当てます。
2. 前提条件
出力をサイレンシングする前に、コマンドを実行するときにBashが出力を処理する方法を最初に理解する必要があります。
2.1. 標準出力とエラー
Bashコマンドを実行すると、新しいプロセスが作成されます。 このプロセスからのエラーはすべてエラーストリームに書き込まれ、その他の出力はすべて出力ストリームに書き込まれます。
また、Bashは、数値のファイル記述子(FD)で示される、プロセスごとに複数のファイルを自動的に開きます。
これらのFDの2つは、標準出力(stdout)と標準エラー(stderr)です。 デフォルトでは、 Bashはエラーストリームをstderrに送信し、出力ストリームをstdoutに送信します。 stdoutとstderrの両方で、これらのFDに書き込まれた文字は、コマンドが実行されたコンソールに表示されます。
さらに、 Bashは、stdout FDに識別子1を割り当て、stderrFDに2を割り当てます。
2.2. 出力のリダイレクト
コマンドの出力を別のFDにリダイレクトすることで、エラーストリームと出力ストリームのデフォルトの宛先を変更できます。 リダイレクト演算子を使用して出力をリダイレクトします:>。
たとえば、 echo コマンドを使用して、 Helloworldをファイル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 に書き込まれ、コマンドからのすべての出力がサイレンシングされます。 。
これを次のBash表記に短縮できます。
command &> /dev/null
この省略形は移植性がなく、Bash4以降でのみサポートされていることに注意してください。
一般的ではありませんが、stdoutとstderrを別々に / dev / null にリダイレクトすることもできますが、Bashスクリプトを自動生成するか、以前のアプローチを使用できない場合を除いて、このアプローチはお勧めしません。
command > /dev/null 2> /dev/null
4. 結論
このチュートリアルでは、Bashプロセスがエラー出力と非エラー出力をFDにストリーミングする方法と、リダイレクト演算子を使用してこれらのストリームを別のFDにリダイレクトする方法について学習しました。
リダイレクトを/dev / null デバイスと組み合わせることで、エラー出力、通常の出力、またはその両方を無音にすることができます。