![Linux 的等效「echo on」?](https://rvso.com/image/1304086/Linux%20%E7%9A%84%E7%AD%89%E6%95%88%E3%80%8Cecho%20on%E3%80%8D%EF%BC%9F.png)
如何取得在 bash 腳本中執行的所有命令的標準輸出?
即輸出必須包含命令輸出和命令本身。
我發現
#!/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
相當於“迴聲關閉”