相当于Linux的“回声”?

Put*_*nik 34 linux bash command-line echo

我怎样才能得到在 bash 脚本中运行的所有命令的标准输出?

即输出必须包含命令输出和命令本身。

我发现

#!/bin/bash -x
Run Code Online (Sandbox Code Playgroud)

但这并不完全相同,因为不是

 mysql -v dbname < dump.sql | grep "CREATE TABLE"
Run Code Online (Sandbox Code Playgroud)

表明

+ mysql -v dbname
+ grep 'CREATE TABLE'
Run Code Online (Sandbox Code Playgroud)

Dan*_*eck 38

使用bash -v.

这是脚本:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'

echo "Done."
Run Code Online (Sandbox Code Playgroud)

这是输出:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'
Goodbye, World

echo "Done."
Done.
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有像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.
Run Code Online (Sandbox Code Playgroud)


小智 15

set -x 是另一种方式。

$ cat a.sh
#!/bin/bash

set -x
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."
Run Code Online (Sandbox Code Playgroud)

输出将是:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.
Run Code Online (Sandbox Code Playgroud)

  • 这就是OP在他的问题中认为毫无用处的东西...... (2认同)

小智 7

set -x相当于“回显”

set +x相当于“回声关闭”