LoginSignup
46

More than 5 years have passed since last update.

PS4の設定でシェルスクリプトのデバッグが捗る

Last updated at Posted at 2014-01-10

.bashrc とかに以下の設定を書いておくと、bash -xset -x 状態でスクリプト実行したときに、出力がリッチになってデバッグが捗ります。

# PS4の設定でシェルスクリプトのデバッグが捗る http://bit.ly/1gncKrn
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME:+$FUNCNAME(): }'

サンプルスクリプト

↓こんな感じの2つのスクリプトがあるとします。

test.sh
#!/bin/bash
echo "i am test.sh"
. func.sh
foo hoge
func.sh
#!/bin/bash
echo "i am func.sh"
function foo() {
  bar "$@"
}
function bar() {
  echo bar "$@"
}

通常の実行例

デフォルトでは PS4='+ ' となっており、その場合の出力は以下のようになります。

+ echo 'i am test.sh'
i am test.sh
+ . func.sh
++ echo 'i am func.sh'
i am func.sh
+ foo hoge
+ bar hoge
+ echo bar hoge
bar hoge

一応source読み込みで入れ子になってるスクリプトで実行されたコマンドは ++ 表記で2段目の入れ子ファイル上のコマンドですよーてことは分かりますがそれだけです。

いい感じの実行例

冒頭のPS4を設定しておくと以下の様な感じになります。

$ bash -x test.sh
+(test.sh:2): echo 'i am test.sh'
i am test.sh
+(test.sh:3): . func.sh
++(func.sh:2): echo 'i am func.sh'
i am func.sh
+(test.sh:4): foo hoge
+(func.sh:4): foo(): bar hoge
+(func.sh:7): bar(): echo bar hoge
bar hoge

ファイル名や実行中コマンドのスクリプト内行番号や、関数中ならその関数名まで表示してくれます。便利!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46