【问题标题】:Is there way to check if shell script is executed with -x flag有没有办法检查 shell 脚本是否使用 -x 标志执行
【发布时间】:2016-09-01 19:15:49
【问题描述】:

我正在尝试检查脚本,如果该脚本使用 -x 标志执行,该标志用于调试 shell 脚本。 有什么方法可以检查脚本本身是否设置了 -x 。 我想有条件地检查它并在设置时做一些事情。

【问题讨论】:

    标签: bash shell sh


    【解决方案1】:

    用途:

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

    来自Bash manual

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

    【讨论】:

    • @john-kugelman,您删除了 $- 周围的引号,即使它可能是空白的。是否可以假设即使 $- 扩展为空字符串,[[ 也允许使用 == 对其进行比较?
    • @ghoti [ 是内置的 shell,[[ 是 shell 关键字,对于后者,您不需要添加引号。使用单括号时:[ 您必须添加引号。您可以查看更多详情here
    【解决方案2】:

    这样做的便携方式(没有像[[ ]]这样的bashism)是

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

    【讨论】:

      【解决方案3】:

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

      trap "do_this_if_it_is_being_debugged" DEBUG
      
      function do_this_if_it_is_being_debugged() {
      ...
      }
      

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

      【讨论】:

        【解决方案4】:

        $SHELLOPTS 中查找xtrace

        例如:

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

        【讨论】:

          猜你喜欢
          • 2012-10-23
          • 2013-07-23
          • 2022-06-15
          • 2016-12-06
          • 2021-10-06
          • 2013-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多