我知道它有什么bash -x
作用,但是它有什么作用bash +x
呢?
谷歌搜索没有找到结果,手册也没有提到这一点。
答案1
-x
, 与...一样-o xtrace
使选项xtrace
。
+x
, 与...一样+o xtrace
禁用它。
这些选项可以传递给解释器,以便在启动时启用/禁用这些选项,或者传递给( set
/// set -o xtrace
) set -x
,以便在运行时启用/禁用它们。set +o xtrace
set +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.sh
in 。$PATH