Fish での Bash set
この記事では、Fish シェルで set -e
、set -u
、set -x
を bash する方法を学びます。
Bash set -x
set -x
コマンドは、デバッグとトラブルシューティングの目的で、実行された各ステートメントをシェルに出力することにより、Bash スクリプトをデバッグするために使用されます。set -x
コマンドは、インタラクティブな Bash シェルで直接実行することも、Bash スクリプト内で実行することもできます。
set -x
コマンドは通常、Bash シェルの初期化を sh-bang
の後に配置します。
この例では、set -x
コマンドを使用してデバッグを有効にします。デフォルトでは、Bash ではデバッグが無効になっています。
代わりに、検証を容易にするために、各ステートメントが Bash ターミナルに出力され、その後にステートメントの結果が続きます。たとえば、echo "The First Tree"
が最初に書き込まれ、次にその結果が書き込まれます。
さらに、デバッグされたステートメントはプラス記号で始まります。
#!/bin/bash
set -x
echo " The First Tree"
echo "The Second Tree"
出力:
+ echo ' The First Tree'
The First Tree
+ echo 'The Second Tree'
The Second Tree
Bash set -e
set -e
コマンドを使用すると、スクリプトまたは関数の実行を停止し、スクリプトまたは関数の実行に依存して結果に関する正確な情報が必要な場合に、ゼロ以外のエラーコードを返すことができます。
デフォルトでは、Bash 関数とスクリプトは、実行が正しく、エラーなしで完了した場合、0 を返します。ただし、問題が発生した場合、エラーコードはエラーに関する特定の詳細を提供します。
次の例では、スクリプトの先頭でエラーが発生した場合に exit を構成します。ルート権限がないため、mkdir /root/test
はエラーを返し、ディレクトリを作成できません。
その結果、echo "Progress..."
という行を実行して、端末に表示できるようになりました。
#!/bin/bash
set -e
mkdir /root/test
echo "Progress..."
Bash set -u
set-u
コマンドは、未設定の変数をエラーとして解釈し、すぐに終了するように Bash シェルに指示します。これにより、高度な言語の動作にかなり近づくことができます。
set -u
コマンドは、未使用の Bash 変数のエラーを防止および表示できます。
例:
#!/bin/bash
firstName="Jackie"
fullName="$firstname John"
echo "$fullName"
前の例を参照してください。間違いがわかりますか?
3 行目の右側では、"firstname"
という単語がキャメルケースではなくすべて小文字で表示されます。 -u
オプションがないと、このエラーは表示されません。
ただし、-u
オプションを使用すると、スクリプトはその行で終了コード 1
で終了し、メッセージ"firstname: unbound variable"
が stderr
に出力されます。
一般に、かなり後になるまで見つからない可能性のある微妙なバグを作成するのではなく、明示的かつ迅速に失敗するようにします。
フィッシュシェルのコマンド
set fish_trace 1 # display the expanded command line before execution
set fish_trace 2 # prepend file and line number to the command line
set fish_trace 1 1 # print the command line before execution and the exit status following execution.
set fish_trace 1 2 # as above, except print the exit status of all subprocesses (?)
set fish_trace 0 1 # print command-line exit status
set -u
、set -e
、set -x
などのこれらのオプションは、Fish には存在しません。Fish に変数を設定するための専用の構文はありません。
代わりに、変数名とその値を受け入れる標準コマンド set
を使用します。変数と値の両方が指定されている場合、set
は指定された名前の変数に値を割り当てます。
Fish のすべての変数はリストであるため、複数の値を使用できます。