Bashスクリプトで実行されるすべてのコマンドを標準出力にするにはどうすればよいですか?
つまり、出力にはコマンド出力とコマンド自体が含まれている必要があります。
見つけた
#!/bin/bash -x
しかし、これはまったく同じではありません。
mysql -v dbname < dump.sql | grep "CREATE TABLE"
それが示している
+ mysql -v dbname
+ grep 'CREATE TABLE'
bash -v
を使用します。
これはスクリプトです:
#!/bin/bash -v
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."
これは出力です:
#!/bin/bash -v
echo "Hello, World" | sed 's|Hello|Goodbye|'
Goodbye, World
echo "Done."
Done.
残念ながら、拡張コマンドを出力するためのPS4
のような特別なマーカーはありません。両方を組み合わせてコマンドをすばやく特定することもできます。
#!/bin/bash -vx
echo "Hello, World" | sed 's|Hello|Goodbye|'
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
echo "Done."
+ echo Done.
Done.
set -xはそれを行う別の方法です。
$ cat a.sh
#!/bin/bash
set -x
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."
出力は次のようになります。
sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.