在shell脚本中:在执行时重定向echo shell命令

时间:2017-06-11 19:37:49

标签: linux bash shell

这是问题In a shell script: echo shell commands as they are executed的扩展。

因此,我们通过set -v(对于详细,扩展前)或set -x(对于xtrace,扩展后)使用命令行回显;或两者set -vx。大。

我的问题是:我们如何重定向那些回声线(例如)到文件?

如果我运行以下行,

BLA='xyz'
set -v
echo $BLA > bla.log

,显然,bla.log将包含' xyz'而不是回声' echo $BLA > bla.log'。

我显然需要更好/更好地理解shell,看看这里发生了什么;除了“如何重定向”之外,我们将非常感谢更深入的解释。溶液

由于

2 个答案:

答案 0 :(得分:2)

要将xtrace输出发送到除stderr之外的其他位置,可以将BASH_XTRACEFD设置为打开文件描述符的编号。例如。这会将xtrace输出定向到名为xtrace的文件:

$ exec 19>xtrace; BASH_XTRACEFD=19; set -x

(我从帽子里拿了19个,你可以使用任何fd号码,只要它不习惯做别的事情)

答案 1 :(得分:1)

set -xset -v打印的文本正在写入stderr。如果您希望所有输出都转到bla.log,请执行以下操作:

exec > bla.log 2>&1
set -v 
echo bla