![Linux では「echo on」と同等ですか?](https://rvso.com/image/1304086/Linux%20%E3%81%A7%E3%81%AF%E3%80%8Cecho%20on%E3%80%8D%E3%81%A8%E5%90%8C%E7%AD%89%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
bash スクリプトで実行されるすべてのコマンドを stdout に出力するにはどうすればよいですか?
つまり、出力にはコマンド出力とコマンド自体が含まれている必要があります。
私は見つけた
#!/bin/bash -x
しかし、これは全く同じではありません。
mysql -v dbname < dump.sql | grep "CREATE TABLE"
それが示している
+ mysql -v dbname
+ grep 'CREATE TABLE'
答え1
使用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.
答え2
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.
答え3
set -x
「エコーオン」と同等である
set +x
「エコーオフ」と同等です