1. ホーム
  2. bash

[解決済み] シェルコマンドを実行しながらエコーする方法

2022-03-18 02:03:03

質問

シェルスクリプトで、呼び出されたすべてのシェルコマンドをエコーし、任意の変数名を展開するにはどうすればよいですか?

例えば、次のような行があったとします。

ls $DIRNAME

スクリプトでコマンドを実行し、次のように表示させたいと思います。

ls /full/path/to/some/dir

目的は、呼び出されたすべてのシェルコマンドとその引数のログを保存することです。そのようなログを生成するためのより良い方法はあるでしょうか?

どのように解決するのですか?

set -x または set -o xtrace は変数を展開し、行の前に小さな+記号を表示します。

set -v または set -o verbose は、印刷前に変数を展開しない。

使用方法 set +xset +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
$