48
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2014-01-10

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

# PS4の設定でシェルスクリプトのデバッグが捗る https://qiita.com/kawaz/items/65cdbeaa739c4e6b7776
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

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

48
47
1

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
48
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?