有没有办法检查是否使用-x标志执行shell脚本

时间:2016-09-01 19:15:49

标签: bash shell sh

我正在尝试检查脚本,如果该脚本是使用-x标志执行的,这是用于shell脚本的调试。 有没有办法检查脚本本身是否设置了-x。 我想有条件地检查并做一些事情,如果设置的话。

4 个答案:

答案 0 :(得分:10)

使用:

if [[ $- == *x* ]]; then
  echo "debug"
else
  echo "not debug"
fi

来自Bash manual

  

($ - ,连字符。)扩展到调用时指定的当前选项标志,set builtin命令或shell本身设置的那些(例如-i选项)。

答案 1 :(得分:2)

执行此操作的可移植方式(没有像[[ ]]这样的基本原理)将是

case $- in
(*x*) echo "under set -x"
esac

答案 2 :(得分:2)

您可以捕获DEBUG信号,如下所示:

trap "do_this_if_it_is_being_debugged" DEBUG

function do_this_if_it_is_being_debugged() {
...
}

请注意,这需要在执行set -x 之前执行

答案 3 :(得分:0)

xtrace中查找$SHELLOPTS

例如:

if grep -q xtrace <<<"$SHELLOPTS"; then
    DO_SOMETHING;
fi