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

时间:2019-07-03 14:20:50

标签: linux bash command-line

我想做与shell - Suppress the bash execution trace (set -x) from the outside of the script - 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

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

1 个答案:

答案 0 :(得分:0)

链接到的示例显示了正确的执行方法,该操作在一行中通过运行脚本创建新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,这将抑制微调器。