blog

日常・技術のことを記録する

bash -xv(シェルスクリプトのデバッグオプション)が便利

シェルスクリプトデバッグしたいなーってとき、
今まではロギング関数自作してチマチマやってたんだけど...
便利なオプション教えてもらった\(^o^)/✨

シェルスクリプトサンプル

標準出力に文字列を表示する、lsコマンドでエラーを起こす、な単純な動作のもの。 今回はこれを例とする。

$ cat debugTest.sh 
#!bin/bash

echo "start"

# 存在しないファイルに対してコマンド実行(エラーになる)
ls hogefugapiyo
echo $?

echo "end"


bash実行(オプションなし)

普通にエラー起きて終了ステータスが表示されてる。普通だね。

$ bash debugTest.sh 
start
ls: cannot access hogefugapiyo: No such file or directory
2
end


bash実行(-xオプションのみ)

-xオプションとは「単純なコマンドをそれぞれ展開した後、 PS4を展開した値を表示し、その後にそのコマンドと展開した引き数を表示するオプション」とのこと。
たしかになってるわ。

$ bash -x debugTest.sh 
+ echo start
start
+ ls hogefugapiyo
ls: cannot access hogefugapiyo: No such file or directory
+ echo 2
2
+ echo end
end


bash実行(-vオプションのみ)

-vオプションは、「シェルの入力行を読み込んだ際に表示する」もの。
どっちがソースでどっちが実行結果なのか、ちょっとだけわかりづらい。

$ bash -v debugTest.sh 
#!bin/bash

echo "start"
start

# 存在しないファイルに対してコマンド実行(エラーになる)
ls hogefugapiyo
ls: cannot access hogefugapiyo: No such file or directory
echo $?
2

echo "end"
end


bash実行(-xvオプション)

組み合わせて-xvオプション。
いいね。展開前の変数も、結果も表示されるから過不足ない!

$ bash -xv debugTest.sh 
#!bin/bash

echo "start"
+ echo start
start

# 存在しないファイルに対してコマンド実行(エラーになる)
ls hogefugapiyo
+ ls hogefugapiyo
ls: cannot access hogefugapiyo: No such file or directory
echo $?
+ echo 2
2

echo "end"
+ echo end
end


bashのオプションって、なんか知らんけど思いつきもしなかった、、、 これからめちゃ使お!!!\(^o^)/
bash - コマンド (プログラム) の説明 - Linux コマンド集 一覧表