linux – 将bash -x输出发送到logfile而不中断标准输出

前端之家收集整理的这篇文章主要介绍了linux – 将bash -x输出发送到logfile而不中断标准输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法通过运行带有-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,您不会冒险更改脚本的行为.

猜你在找的Linux相关文章