linux – 将bash -x输出发送到logfile而不中断标准输出
发布时间:2020-12-13 18:01:55 所属栏目:Linux 来源:网络整理
导读:有没有办法通过运行带有-x选项的bash脚本向文件发送显示的信息,而不更改运行脚本的用户看到的标准输出? 这是我想在我们使用的bash脚本中实现的调试功能,它经常更改. 非常感激. 解决方法 -x的输出转到stderr,而不是stdout.但即使这可能是一个问题 – 大量的
有没有办法通过运行带有-x选项的bash脚本向文件发送显示的信息,而不更改运行脚本的用户看到的标准输出?
这是我想在我们使用的bash脚本中实现的调试功能,它经常更改. 非常感激. 解决方法
-x的输出转到stderr,而不是stdout.但即使这可能是一个问题 – 大量的脚本将对stderr的内容具有功能依赖性,并且在某些情况下将调试和stderr流混合在一起会产生混乱.
Bash版本> 4.1确实提供了不同的解决方案:BASH_XTRACEFD环境变量允许您指定将用于发送调试流的文件描述符.这可以是文件或管道或任何其他你喜欢的unix-y善良. # Use FD 19 to capture the debug stream caused by "set -x": exec 19>/tmp/my-script.log # Tell bash about it (there's nothing special about 19,its arbitrary) export BASH_XTRACEFD=19 # turn on the debug stream: set -x # run some commands: cd /etc find echo "Well,that was fun." # Close the output: set +x exec 19>&- # See what we got: cat /tmp/my-script.log 稍微摆弄一下,你可以做其他的事情 – 比如在stdout和/或stdin流上做’tee’,然后用调试输出交错,这样你的日志就更完整了.有关详细信息,请参阅https://stackoverflow.com/questions/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself. 这种方法相对于替代方案的最大优点是,通过将调试输出注入stdout或stderr,您不会冒险更改脚本的行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |