Bashの`set -x`コマンド
Bash の set コマンドは、bash で多くの目的に使用され、シェル環境のさまざまな機能を有効または無効にするための多くのオプションがあります。 -x オプションは、トラブルシューティングのために bash スクリプトのデバッグ機能を有効にするために使用される set コマンドのオプションの1つです。 `set -x` コマンドは、ターミナルまたは任意の bash スクリプト内で使用できます。 `set -x` コマンドを使用する目的については、このチュートリアルで説明されています。
デバッグを有効にする
スクリプトが正しい出力を示さない場合や予期しない出力を示す場合は、デバッグを使用することでこの問題を解決できます。デバッグ機能は、以下に示すように、bashスクリプトでさまざまな方法で有効にできます。
デバッグ機能は、ターミナル内またはbashスクリプト内で「set -x」コマンドを使用することで有効にできます。「set -x」コマンドの使用は、チュートリアルの次の部分で示されています。
デバッグ機能は、以下のコマンドのようにbashファイルを実行する際に-xオプションを使用することでも有効にできます。
bash -x filename.bashデバッグ機能は、スクリプトの最初に以下の行を使用することで有効にすることもできます。
#!/bin/sh -xデバッグを無効にする
問題を解決した後にbashスクリプトのデバッグ機能を無効にする必要があります。デバッグ機能を無効にするためには、`set +x`コマンドが使用されます。
「set -x」コマンドのさまざまな例
`set -x`オプションの2つの異なる使用法が例を使って示されました。
例-1: デバッグ機能の有効化と無効化
次のスクリプトを使用して、ユーザーからの入力を受け取る bash ファイルを作成します。これは、`set -x` および `set +x` コマンドを使用する前と後に行われます。最初の名前の値は `set -x` コマンドを使用する前に取得して表示されます。苗字の値は `set -x` コマンドを使用した後に取得して表示されます。次に、最初の名前と苗字の値は `set +x` コマンドを使用した後に表示されます。
#!/bin/bash
#Take input and print
read -p "Enter your first name: " firstname
echo "Your first name is $firstname"
#Enable the set -x command
set -x
#Take another input and print
read -p "Enter your last name: " lastname
echo "Your last name is $lastname"
#Disable the set x command
set +x
#Print the variables
echo "Your fullname is $firstname $lastname"出力:
上記のスクリプトを実行した後、次の出力が印刷されます。この出力によれば、スクリプトの各ステートメントは「set -x」コマンドを実行した後に印刷されています。
例-2: `set -x` コマンドを使用したデバッグスクリプト
ユーザーからファイル名を受け取り、デバッグ機能を有効にするスクリプトを含む bash ファイルを作成します。`set -x` コマンドはスクリプトの冒頭でデバッグ機能を有効にするために使用されます。次に、ユーザーからファイル名を受け取ります。ユーザーがファイル名を提供しなかった場合、メッセージが表示されます。ユーザーから受け取ったファイル名が存在しないかファイルでない場合は、別のエラーメッセージが表示されます。有効なファイル名がユーザーから受け取られた場合、そのファイルの内容が表示されます。
#!/bin/bash
#Enable the debugging
set -x
#Take the filename from the user
echo -n "Enter a filename:"
read fn
#Check whether the filename is empty or not
if [ "$fn" == "" ];
then
echo "Filename is missing."
#Check whether the file exists or not
elif [ ! -f "$fn" ];
then
#Print error message
echo "$fn does not exist."
else
#Print the file content
cat "$fn"
fi出力:
上記のスクリプトをファイル名を指定せずに実行すると、次の出力が表示されます。この出力は、空の値がファイル名として取得されたことを示しています。空のファイル名を確認するための「if」条件が、空の入力に対して真として返されました。したがって、エラーメッセージを印刷するための「echo」ステートメントがデバッグオプションのために印刷され、「ファイル名が欠落しています」というエラーメッセージが表示されました。
上記のスクリプトをファイル名で実行した後、次の出力が表示されます。この出力は、空のファイル名をチェックするための`if`条件がfalseを返し、存在しないファイルをチェックするための`if`条件もfalseを返したことを示しています。入力されたファイル名testfile.txtは現在の場所に存在します。そのため、testfile.txtファイルを読むための`cat`コマンドが実行され、ファイルの内容が印刷されました。
上記のスクリプトをファイル名で実行した後、以下の出力が表示されます。この出力は、空のファイル名をチェックするための `if` 条件が偽で返され、存在しないファイルをチェックするための `if` 条件が真で返されたことを示しています。なぜなら、file1.txt は現在の場所に存在しないからです。そのため、ファイルを読むための `cat` コマンドは実行されず、エラーメッセージ「file1.txt は存在しません。」が表示されました。
結論
デバッグ作業は、プログラミング言語の重要な部分であり、コードのエラーを簡単に見つけるために必要です。デバッグ作業はプログラミング言語によって異なる方法で行われます。このチュートリアルでは、bashスクリプトのデバッグ機能を有効にするための複数の方法と、bashスクリプトのデバッグにおける `set -x` コマンドの使い方について説明します。



