Bash 抑制出力
この記事では、Bash を使用してコマンドの出力を抑制する方法について説明します。 さらに、後で使用するために出力をファイルにリダイレクトすることも検討します。
シェルとスクリプトの概要
Shell は、Linux でコマンド ライン インターフェイスを実行するプログラムです。 Linux では、すべてのユーザーがさまざまなシェルを使用できます。
通常、デフォルトの GNU の Bourne-Again Shell (Bash) が多くの Linux ディストリビューションで使用されています。
一連のコマンドを含むファイルは、スクリプトと呼ばれます。 このファイルは、Bash プログラムを使用して読み取られ、実行されます。
たとえば、First.sh
という名前のファイルの内容が次のようになっているとします。
#!/bin/bash
echo "Hello"
echo "World"
上記の例では、First.sh
は、スクリプトの実行時に端末に Hello World
を表示する 2つの echo
コマンドを含むスクリプト ファイルです。 最初の行 #!/bin/bash
は、スクリプトの実行に使用されるインタープリターの場所にフラグを立てます。
Linux ターミナルで Bash スクリプトを実行するには、2つの異なる方法があります。
bash First.sh
出力:
Hello
World
./First.sh
出力:
Hello
World
Bash スクリプトでコマンドの出力を抑制する
Bash スクリプトの実行中に、Bash スクリプトで記述されたコマンドの出力を抑制することができます。 出力を null
デバイスにリダイレクトできます。
たとえば、First.sh
スクリプトの出力を抑制したい場合は、次のコマンドを使用できます。
./First.sh > /dev/null
このコマンドは、First.sh
スクリプトの出力を抑制し、端末には何も表示しません。 ただし、First.sh
スクリプトにエラーが含まれている場合でも、ターミナルに表示されます。
First.sh
スクリプトで次のコマンドを検討してください。
#!/bin/bash
echo "Hello
echo "World"
このスクリプトでは、最初の echo
コマンドに "
がありません。./First.sh
を使用して実行した次のスクリプトの出力は次のとおりです。
./First.sh: line 3: unexpected EOF while looking for matching `"'
./First.sh: line 4: syntax error: unexpected end of file
コマンド ./First.sh > /dev/null
を使用してこのスクリプトを実行すると、同じ出力が表示されます。
./First.sh: line 3: unexpected EOF while looking for matching `"'
./First.sh: line 4: syntax error: unexpected end of file
Bash スクリプトのエラーを抑制する
Bash スクリプトにエラーが含まれている場合、前述のように、./scriptname > dev/null
コマンドはエラーを抑制せず、端末にエラーを表示します。
ターミナルからのエラーも抑制できます。 次のコマンドは、First.sh
Bash スクリプトの実行中にターミナルからの出力とエラーを抑制することができます。
./First.sh &>/dev/null
./First.sh >/dev/null 2>&1
./First.sh >/dev/null 2>/dev/null
最初のコマンド ./First.sh &>/dev/null
は、すべての Linux シェルで機能するとは限りません。
Bash スクリプトの出力を記録または保存する
Bash スクリプトの実行中に /dev/null
を使用すると、出力が抑制されます。 ただし、カスタマイズされたファイルに出力を保存または記録することはできます。
次の First.sh
スクリプトを考えてみましょう。
#!/bin/bash
echo "Hello"
echo "World"
次のコマンドを使用して First.sh
スクリプトを実行し、Bash 出力を保存または記録できます。
./First.sh > outputfile.out
上記のコマンドを実行すると、端末には何も表示されません。 ただし、outputfile.out
という名前の新しいファイルが作成され (まだ存在しない場合)、ファイルの内容は次のとおりです。
Hello
World
outputfile.out
が既に存在する場合、既存のコンテンツがニス塗りされ、スクリプトの新しい出力がファイルに保存されます。