![](/img/trans.png)
[英]In a shell script, how to echo shell commands as they are executed to standard output (not standard error)?
[英]In a shell script: redirect echo shell commands as they are executed
这是对shell脚本中问题的扩展:在执行shell命令时回显shell命令 。
因此,我们可以通过使用set -v
(对于冗长的命令,在扩展之前)或set -x
(对于xtrace的命令,在扩展之后)来回显命令行。 或两者都set -vx
。 大。
我的问题是:我们如何重定向这些回显的行(例如,重定向到文件)?
如果我执行以下几行,
BLA='xyz'
set -v
echo $BLA > bla.log
,很明显, bla.log
将包含“ xyz
”,而不是echo“ echo $BLA > bla.log
”。
我显然需要对shell有更好的了解,以了解发生了什么。 除了“如何重定向”解决方案之外,还需要更深入的解释。
谢谢
要将xtrace输出发送到stderr以外的其他位置,可以将BASH_XTRACEFD
设置为打开文件描述符的编号。 例如,这会将xtrace输出定向到名为xtrace
的文件:
$ exec 19>xtrace; BASH_XTRACEFD=19; set -x
(我从帽子上掏出19,您可以使用任何fd号码,前提是该号码不用于其他用途)
由set -x
和set -v
结果打印的文本set -v
被写入stderr。 如果要将所有输出都发送到bla.log,请执行以下操作:
exec > bla.log 2>&1
set -v
echo bla
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.