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

让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

打印:

06002

我可以对疏水阀或管道线进行任何更改,以便将线条打印为一条线路吗?

将您的命令更改为:
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,但我不知道如何控制此输出的格式.

(编辑:李大同)

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

    推荐文章
      热点阅读