是否可以测试 bash 脚本是否被执行-x
?
我正在编写一个也运行一些远程脚本的脚本,我希望能够执行以下操作:
USE_X="$( run_with_x && "-x" || "" )"
ssh $host "bash $USE_X some_script.sh"
答案1
只需查看$-
变量即可。
USE_X=`case "$-" in *x*) echo "-x" ;; esac`
(是的,我确实在不调用 grep 的情况下做到了这一点。保存 pid!)
答案2
如果脚本使用 运行-x
,则该表达式将为 true,否则为 false:[[ $- =~ x ]]
因此,如果脚本使用-x
and “”(空)运行,则该表达式将为“-x”,否则:$([[ $- =~ x ]] && echo "-x")
答案3
答案4
bash 手册页文档set -o xtrace
相当于set -x
,这又相当于-x
作为 shell 的参数。 (到目前为止,这与 SUSv3 sh 兼容,但-o option
需要注意“如果系统支持用户可移植性实用程序选项”。)
此外,set -o
如果没有选项,则会打印所有-o
选项的当前状态。 (SUSv3 也指定了这一点,但没有用处;格式未指定,因此只有当您知道正在运行的 shell 使用类似于 bash 的格式时,您才能依赖它。)
所以,管道set -o | grep xtrace | grep -q on
应该就是您正在寻找的。