在Bash中,你可以设置-x来启用调试,有没有什么方法可以知道脚本中是否已经设置了?



debugging set (2)

$ [ -o xtrace ] ; echo $?
1
$ set -x
++ ...
$ [ -o xtrace ] ; echo $?
+ '[' -o xtrace ']'
+ echo 0
0

在制作复杂的bash脚本时,我会经常使用这个命令:

设置-x

使我能够调试脚本,如果它不行为。

不过,我有一些在调试模式下生成大量垃圾的UI函数,所以我想将它们包装在下面的条件中:

ui~title(){
    DEBUG_MODE=0
    if [ set -x is enabled ] # this is the bit I don't know how to do
    then
        # disable debugging mode for this function as it is not required and generates a lot of noise
        set +x
        DEBUG_MODE=1
    fi

    # my UI code goes here

    if [ "1" == "$DEBUG_MODE" ]
    then
        # re enable debugging mode here
        set -x
    fi
}

问题是,我不知道如何知道调试模式是否启用。

我假设这是可能的,我似乎无法找到它,尽管大量的搜索。

提前感谢您的任何提示


为了完整起见,下面是两个可重用函数:

is_shell_attribute_set() { # attribute, like "x"
  case "$-" in
    *"$1"*) return 0 ;;
    *)    return 1 ;;
  esac
}


is_shell_option_set() { # option, like "pipefail"
  case "$(set -o | grep "$1")" in
    *on) return 0 ;;
    *)   return 1 ;;
  esac
}

用法示例:

set -x
if is_shell_attribute_set e; then echo "yes"; else echo "no"; fi # yes

set +x
if is_shell_attribute_set e; then echo "yes"; else echo "no"; fi # no

set -o pipefail
if is_shell_option_set pipefail; then echo "yes"; else echo "no"; fi # no

set +o pipefail
if is_shell_option_set pipefail; then echo "yes"; else echo "no"; fi # no




set