Linuxに相当する「エコーオン」?


27

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

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

見つけた

#!/bin/bash -x

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

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

それが示している

+ mysql -v dbname
+ grep 'CREATE TABLE'

回答:


29

を使用し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.

12

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.

1
どの種類OPは彼の質問では役に立たない右...として却下するものである
ダニエル・ベック

@Ashok説明してください。私は違いを見ることができません:ここで ps:GNU bash、バージョン4.1.5(1)-release(i486-pc-linux-gnu)Ubuntu 10.04.3
Putnik

1
@Putnik基本的なことは同じですがset -x、スクリプト内のどこにいても、また非アクティブ化することもできます。そのため、echo "Done"ライン上でのみ必要な場合は、set -xその直前に配置します。
ダニエルベック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.