シェルスクリプト – デバッグ -
2011年4月3日 2:37 AM by Abalone




シェルスクリプトを書いていく上でデバッグを行わなければならないことももちろんあります。
特に他人が書いたスクリプトがうまく動かない場合とか、内部の動作を確認して修正しなければならない場合など、デバッグする方法がないと大分面倒なことになります。

デバッグプリントを仕込む方法でも、もちろんいいのですが、シェルスクリプトには実行時トレースを出力する機能があります。トレース機能を ON/OFF するには、”set -x” と “set +x” を使います。例えば、以下のような単純なスクリプトを考えます。


#!/bin/sh

echo 1
echo 2
echo 4
echo 7

実行すると以下のような出力になります。


1
2
4
7

単純なスクリプトなので、出力結果はすぐに予想できますが、もっと複雑なスクリプトの出力だと思ってください。でも、期待している出力は以下の物だったとします。


1
2
4
8

ま、元は単純なスクリプトなのでなぜ最後の出力が7になっているのかはすぐに分かります。実際7を出力してるし。でも、これがもっと複雑なスクリプトだとして、何かの計算結果だとするとなかなか分からなかったりする、かもしれません。そんなときに”set -x”と”set +x”を使います。


#!/bin/sh

set -x

echo 1
echo 2
echo 4
echo 7

set +x


これを実行すると出力は以下のようになります。

+ echo 1
1
+ echo 2
2
+ echo 4
4
+ echo 7
7
+ set +x

これで、7が出力されているのは"echo 7"のせいだと分かるので、ここを直せばいいということになります。ここで、"set -x"自身は出力されていませんが、"set +x"は出力されていることに注意します。これは、"set +x"が実行された後はトレース出力されなくなるため、これが出力されないとトレースが終了したのか、単に何も出力されていないのかが分からなくなるためです。


例えば、"set +x"をスクリプトの最後ではなく、真ん中辺りに書いてみます。


#!/bin/sh

set -x

echo 1
echo 2
set +x
echo 4
echo 7

こうすると出力は以下のようになります。"set +x"が出力されて以降、トレースは出力されません。

+ echo 1
1
+ echo 2
2
+ set +x
4
7

こんな感じで、さすがにデバッガはありませんが、トレース出力を見てデバッグを行うことができます。





トラックバックURL


この記事に対するコメント/トラックバックはまだありません


コメントをどうぞ

お名前(必須)
Eメールアドレス(公開されません)(必須)