对于 Linux 来说相当于“echo on”?

对于 Linux 来说相当于“echo on”?

如何才能将 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相当于“echo on”

set +x相当于“echo off”

相关内容