我正在编写一个
Bash脚本,我希望所有命令在发生时都能被回显.我知道我需要使用set -x和set x分别关闭和打开此行为(
SOF post here).但是,它不会回显所有内容,即I / O重定向.
例如,假设我有这个非常简单的Bash脚本:
set -x ./command1 > output1 ./command2 arg1 arg2 > output2
这将是输出
+ ./command1 + ./command2 arg1 arg2
Bash没有回显我的stdout重定向到output1和output2.为什么是这样?我怎样才能实现这种行为?也许我必须在脚本中设置shopt选项吗?
注意:我还注意到管道不会按预期打印.例如,如果我要使用此命令:
set -x ./command3 | tee output3
我会得到这个输出:
+ tee output3 + ./command3
如何使命令完全按照它们的编写方式进行回显,而不是让脚本重新排序管道?
使用set -x是不可能的.您唯一的选择是通过DEBUG陷阱查看当前命令.
trap 'printf %s\\n "$BASH_COMMAND" >&2' DEBUG
这不会显示-x将设置的精确参数.将它们组合起来可以为您提供全面的图片,尽管它有很多调试输出.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。