让Bash陷阱DEBUG将管道视为一个命令
发布时间:2020-12-15 16:59:59 所属栏目:安全 来源:网络整理
导读:我在用 trap 'echo -e "e[92m$$BASH_COMMANDe[0m"' DEBUG 在Bash脚本中打印每个执行的命令. 这工作正常,只是当我将它们一起管道时它会打印两个命令: bzip2 -dc dump.sql.bz2 | mysql test 打印: 06002 我可以对疏水阀或管道线进行任何更改,以便将线条打
我在用
trap 'echo -e "e[92m$$BASH_COMMANDe[0m"' DEBUG 在Bash脚本中打印每个执行的命令. 这工作正常,只是当我将它们一起管道时它会打印两个命令: bzip2 -dc < dump.sql.bz2 | mysql test 打印:
我可以对疏水阀或管道线进行任何更改,以便将线条打印为一条线路吗?
将您的命令更改为:
mysql test < <(bzip2 -dc < dump.sql.bz2) 使用process substitution而不是管道使命令从Bash的角度来看是一个简单的命令,这是DEBUG陷阱和内置$BASH_COMMAND变量运行的粒度级别. 背景: 设计的DEBUG(伪)信号在简单命令的级别上运行,$BASH_COMMAND也是如此. bzip2 -dc< dump.sql.bz2 | mysql test是由多个简单命令组成的管道. 因此,您的陷阱语句无法通过管道执行您想要的操作. 使用复合命令(例如,while循环或命令组({…; …;})或命令列表(与操作符连接的简单命令或管道;&&)最接近您想要的内容; ||&)是使用set -v,它在执行之前将整个命令回显到stderr,但我不知道如何控制此输出的格式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |