シェル スクリプトで、呼び出されたすべてのシェル コマンドをエコーし、変数名を展開するにはどうすればよいですか?
たとえば、次の行があるとします。
ls $DIRNAME
スクリプトでコマンドを実行し、次の内容を表示したい。
ls /full/path/to/some/dir
目的は、呼び出されたすべてのシェル コマンドとその引数のログを保存することです。このようなログを生成するより良い方法はあるでしょうか?
ベストアンサー1
set -x
または、set -o xtrace
変数を展開し、行の前に小さな + 記号を出力します。
set -v
または、set -o verbose
印刷前に変数を展開しません。
上記の設定をオフにするには、set +x
と を使用します。set +v
スクリプトの最初の行に#!/bin/sh -x
(または) を置くと、スクリプトの後半の(または)-v
と同じ効果が得られます。set -x
-v
上記は でも動作します/bin/sh
。
bash-hackersのwikiをご覧くださいset
属性、そしてデバッグ。
$ cat shl
#!/bin/bash
DIR=/tmp/so
ls $DIR
$ bash -x shl
+ DIR=/tmp/so
+ ls /tmp/so
$