スクリプト中で実行しているコマンドを表示する
普通にシェルスクリプトを書くと実行結果のみが表示され、『実行しているコマンドそのもの』は表示されません。「試験結果のエビデンスとして、結果と共にコマンドも残したい」「スクリプトをデバッグしたい」といった場合は実行結果だけでなく、実行したコマンドも表示されると便利です。今回は「スクリプト中で実行しているコマンドも表示する方法」をメモします。
/bin/sh に「-x」オプションを付与する¶
/bin/sh や /bin/bash に「-x」オプションを指定すると実行中のコマンドも表示出来ます。以下は man sh からの抜粋です。
1 2 |
|
通常のスクリプト(実行コマンドは表示しない)¶
以下は何の変哲も無いシェルスクリプトです。
1 2 3 4 5 6 |
|
これを実行すると以下の結果になります。
1 2 3 4 |
|
スクリプトのデバッグ(実行コマンドも表示する)¶
上述の通り、実行しているコマンドも表示させたい場合は /bin/sh に「-x」オプションを指定します。例えば、以下のように書きます。
1 2 3 4 5 6 |
|
これを実行すると以下の結果になります。結果だけで無く、実行しているコマンドも表示されているのが分かります。
1 2 3 4 5 6 7 |
|
部分的に実行コマンドを表示する¶
スクリプト全体では無く、「特定部分だけ、実行コマンドを表示する」にはスクリプト中で以下のコマンドを実行します。
コマンド | 意味 |
---|---|
set -x | このコマンドを実行以降、実行コマンドを表示する |
set +x<_i> | このコマンドを実行以降、実行コマンドを表示しない |
例えば以下のようなスクリプトを用意します。挙動を予測しやすいようにコメントを入れてあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
これを実行すると以下の結果になります。「set -x すると、それ以降はコマンドが表示され」「set +x すると、それ以降はコマンドが表示されなくなっている」のが分かります。
1 2 3 4 5 6 7 |
|
スクリプト実行時にシェルを「-x」オプション付きで指定する¶
以下のスクリプトがあるとします。スクリプトの一行目で #!/bin/sh を指定しています(「-x」オプションは指定していません)。
1 2 3 4 5 6 |
|
/bin/sh を指定して実行すると以下の結果になります。実行したコマンドは表示されません。
1 2 3 4 |
|
次は /bin/sh -x を指定して実行してみます。実行したコマンドが表示されます。このようにスクリプトの中身を書き換えなくても、挙動を変えることも出来ます。
1 2 3 4 5 6 7 |
|
続いて、以下のスクリプトがあるとします。スクリプトの一行目で #!/bin/sh -x と「-x」オプションを指定しています。
1 2 3 4 5 6 |
|
/bin/sh を指定して実行してみます。スクリプト中では /bin/sh -x が指定されているにも関わらず、実行したコマンドは表示されません。
1 2 3 4 |
|
次は /bin/sh -x を指定して実行してみます。実行したコマンドも表示されているのが分かります。
1 2 3 4 5 6 7 |
|