web-dev-qa-db-ja.com

Linuxの同等の「エコーオン」?

Bashスクリプトで実行されるすべてのコマンドを標準出力にするにはどうすればよいですか?

つまり、出力にはコマンド出力とコマンド自体が含まれている必要があります。

見つけた

#!/bin/bash -x

しかし、これはまったく同じではありません。

 mysql -v dbname < dump.sql | grep "CREATE TABLE"

それが示している

+ mysql -v dbname
+ grep 'CREATE TABLE'
27
Putnik

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.
32
Daniel Beck

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.
14
Ashok Vairavan