开发者社区> 问答> 正文

bash:BASH_XTRACEFD:5:跟踪文件描述符的值无效

我想做与shell相同的操作-从脚本的外部抑制bash执行跟踪(set -x)-Unix&Linux Stack Exchange的脚本。

在进行Bash调试时,有时会出现命令(spinner 'Now loading... ' &),并且该命令会使调试输出变脏,因为该命令正在使用while循环,因此存在大量输出。

在这种情况下,我想通过来抑制命令的输出spinner 'Now loading... ' 5>/dev/null &。

我搜索了方法,找到了解决方案BASH_XTRACEFD。

但是我尝试在命令行中定义变量,发生了如下错误。

$ export BASH_XTRACEFD="5"
bash: BASH_XTRACEFD: 5: invalid value for trace file descriptor

我猜为什么发生错误的原因是文件描述符已关闭或出现问题。但我不知道该怎么解决。任何想法?

展开
收起
祖安文状元 2020-01-06 15:22:31 1359 0
1 条回答
写回答
取消 提交回答
  • 链接到的示例显示了正确的执行方法,该操作在一行中通过运行脚本创建新Shell之前是一行。

    您的问题是您当前是在没有文件描述符5的交互式外壳中执行此操作的。如果您只想丢弃所有set -x,则可以通过替换外壳并事先创建该文件描述符来解决此问题。您可以使用

    exec 5> export BASH_XTRACEFD=5 那应该解决您演示的问题,但是我觉得您只是在尝试重定向stderr,所以应该

    --> ls -l foo
    ls: cannot access foo: No such file or directory
    root@mybox[/tmp] Wed Jul 03 <11:17:46>
    --> ls -l foo 2>/dev/null # Notice the 2>/dev/null after the command
    root@mybox [/tmp] Wed Jul 03 <11:17:50>
    
    

    万一它正在写给stderr,那将抑制微调器。

    2020-01-06 15:22:38
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载