Bash:测试原始脚本是否使用 `-x` 运行

Dav*_*ver 11 bash

是否可以测试是否使用 bash 脚本执行-x

我正在编写一个还运行一些远程脚本的脚本,我希望能够执行以下操作:

USE_X="$( run_with_x && "-x" || "" )"
ssh $host "bash $USE_X some_script.sh"
Run Code Online (Sandbox Code Playgroud)

小智 10

只看$-变量。

USE_X=`case "$-" in *x*) echo "-x" ;; esac`
Run Code Online (Sandbox Code Playgroud)

(是的,我确实设法在不调用 grep 的情况下做到了这一点。保存 pid!)

  • 真是浪费pid!`case $- in *x*) USE_X="-x";; *) USE_X=;; esac` @bbaja42 它不会扩展到任何东西:它是字符串 `$-` 匹配的模式。 (2认同)

PeP*_*ePa 8

如果脚本用 运行,则此表达式为真-x,否则为假:[[ $- =~ x ]] 因此,如果脚本运行为“-x”,否则为-x“”(空):$([[ $- =~ x ]] && echo "-x")


roz*_*acz 7

可能是最简单的解析方法$-,类似于dagbrown 的方法(也是 pure bash),但没有使用case和反引号(子外壳):

if  [[ ${-/x} != $- ]] ; then USE_X="-x"; fi
Run Code Online (Sandbox Code Playgroud)

甚至更短:

[[ ${-/x} != $- ]] && USE_X="-x"
Run Code Online (Sandbox Code Playgroud)

注意,[[的调用test内置程序(如与壳体[),但一个bash语法构建体(如man bash本dev的建议)。所以我声称它是“更纯粹的 bash”;)