Bash の実行内容のトレースのオプション

Bash には 処理の実行内容をトレースできる デバッグに便利な オプション "-x" と "-v" があります。

文法チェックの "-n" と同じ様に 色々な方法で指定できます。

$ bash -xv test.sh
#!/bin/bash -xv
set -xv

ちなみに、オプション "-x" は実行された内容を出力し オプション "-v" は実行するなコマンドを出力します。

次のシェルスクリプトで試してみます。

[test.sh]

YESTERDAY=$(date --date "1 day ago")
echo $YESTERDAY

まず普通に実行。

$ bash test.sh

Sun Oct 1 21:55:13 JST 2017

まず オプション "-x" だけを指定。

$ bash -x test.sh

++ date --date '1 day ago'
+ YESTERDAY='Sun Oct  1 21:55:23 JST 2017'
+ echo Sun Oct 1 21:55:23 JST 2017
Sun Oct 1 21:55:23 JST 2017

追加で出力された行の先頭に "+" や "++" が付いてます。

"++" は "$()" で実行された部分ですね。

変数が値に転換されています。

次に オプション "-v" だけを指定。

$ bash -v test.sh

YESTERDAY=$(date --date "1 day ago")
date --date "1 day ago"
echo $YESTERDAY
Sun Oct 1 21:55:28 JST 2017

こちらは "+" などは付かず、変数もそのままですね。

"$()" の実行が切りだされています。

さらに オプション "-x" "-v" を両方指定。

$ bash -xv test.sh

YESTERDAY=$(date --date "1 day ago")
date --date "1 day ago"
++ date --date '1 day ago'
+ YESTERDAY='Sun Oct  1 21:55:44 JST 2017'
echo $YESTERDAY
+ echo Sun Oct 1 21:55:44 JST 2017
Sun Oct 1 21:55:44 JST 2017

実行するコマンド、実行内容が全て出力されました。

また オプション "-x" "-v" の指定を取り消すには オプション "+x" "+v" を指定します。

$ set -x

$ YESTERDAY=$(date --date "1 day ago")

++ date --date '1 day ago'
+ YESTERDAY='Sun Oct  1 22:06:42 JST 2017'

$ echo $YESTERDAY

+ echo Sun Oct 1 22:06:42 JST 2017
Sun Oct 1 22:06:42 JST 2017

$ set +x

+ set +x

$ YESTERDAY=$(date --date "1 day ago")
$ echo $YESTERDAY

Sun Oct 1 22:06:57 JST 2017

$ set -v
$ YESTERDAY=$(date --date "1 day ago")

YESTERDAY=$(date --date "1 day ago")
date --date "1 day ago"

$ echo $YESTERDAY

echo $YESTERDAY
Sun Oct 1 22:07:09 JST 2017

$ set +v

set +v

$ YESTERDAY=$(date --date "1 day ago")
$ echo $YESTERDAY

Sun Oct 1 22:07:20 JST 2017

文法チェックのオプション "-n" と "-v" を組み合わせると 実行せずに、実行内容だけを確認することができます。

$ bash -nv test.sh

YESTERDAY=$(date --date "1 day ago")
echo $YESTERDAY

Google サイト内検索

Amazonアソシエイト