Bash 抑制出力

Dr. Muhammad Abdullah 2023年6月20日
  1. シェルとスクリプトの概要
  2. Bash スクリプトでコマンドの出力を抑制する
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 が既に存在する場合、既存のコンテンツがニス塗りされ、スクリプトの新しい出力がファイルに保存されます。

関連記事 - Bash Output