“bash +x script.sh”中的“+x”选项是什么意思?

“bash +x script.sh”中的“+x”选项是什么意思?

我知道它有什么bash -x作用,但是它有什么作用bash +x呢?

谷歌搜索没有找到结果,手册也没有提到这一点。

答案1

-x, 与...一样-o xtrace 使选项xtrace

+x, 与...一样+o xtrace 禁用它。

这些选项可以传递给解释器,以便在启动时启用/禁用这些选项,或者传递给( set/// set -o xtrace) set -x,以便在运行时启用/禁用它们。set +o xtraceset +x

然而,就选择权而言xtrace,选择权是不是$SHELLOPTS默认情况下启用,并且由于 bash 在env 变量或其路径存储在 中的初始化文件之前处理命令行选项$BASH_ENV,因此bash使用该+x选项调用是没有意义的:

$ cat env
set -o xtrace
$ BASH_ENV=env bash +x -c 'echo foo'
+ echo foo
foo
$ env SHELLOPTS=xtrace bash +x -c 'echo foo'
+ echo foo
foo

在这两种情况下,+x都无法set -o xtrace通过$BASH_ENV或取消设置$SHELLOPTS

-x它只有在or之后才有效-o xtrace

$ bash -x +x -c 'echo foo'
foo

因此,如果您有 a (不太可能),bash +x ./script.sh则 1 可能有意义。alias bash='bash -x'

但是你可以这样做:

$ bash +B -c 'echo {a,b}'
{a,b}

要禁用该braceexpand选项默认启用。

或者你可以这样做:

$ env SHELLOPTS=xtrace bash -c 'set +x; echo foo'
+ set +x
foo

禁用xtrace 它在处理时启用$SHELLOPTS


1 请注意,当在当前目录中找不到它时,./需要防止bash查找script.shin 。$PATH

相关内容