这是问题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,看看这里发生了什么;除了“如何重定向”之外,我们将非常感谢更深入的解释。溶液
由于
答案 0 :(得分:2)
要将xtrace输出发送到除stderr之外的其他位置,可以将BASH_XTRACEFD
设置为打开文件描述符的编号。例如。这会将xtrace输出定向到名为xtrace
的文件:
$ exec 19>xtrace; BASH_XTRACEFD=19; set -x
(我从帽子里拿了19个,你可以使用任何fd号码,只要它不习惯做别的事情)
答案 1 :(得分:1)
由set -x
和set -v
打印的文本正在写入stderr。如果您希望所有输出都转到bla.log,请执行以下操作:
exec > bla.log 2>&1
set -v
echo bla