加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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,您不会冒险更改脚本的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读