【发布时间】:2016-09-01 19:15:49
【问题描述】:
我正在尝试检查脚本,如果该脚本使用 -x 标志执行,该标志用于调试 shell 脚本。 有什么方法可以检查脚本本身是否设置了 -x 。 我想有条件地检查它并在设置时做一些事情。
【问题讨论】:
我正在尝试检查脚本,如果该脚本使用 -x 标志执行,该标志用于调试 shell 脚本。 有什么方法可以检查脚本本身是否设置了 -x 。 我想有条件地检查它并在设置时做一些事情。
【问题讨论】:
用途:
if [[ $- == *x* ]]; then
echo "debug"
else
echo "not debug"
fi
来自Bash manual:
($-,连字符。)扩展为调用时指定的当前选项标志,由 set 内置命令,或由 shell 本身设置的那些(例如 -i 选项)。
【讨论】:
$- 周围的引号,即使它可能是空白的。是否可以假设即使 $- 扩展为空字符串,[[ 也允许使用 == 对其进行比较?
[ 是内置的 shell,[[ 是 shell 关键字,对于后者,您不需要添加引号。使用单括号时:[ 您必须添加引号。您可以查看更多详情here
这样做的便携方式(没有像[[ ]]这样的bashism)是
case $- in
(*x*) echo "under set -x"
esac
【讨论】:
您可以捕获 DEBUG 信号,如下所示:
trap "do_this_if_it_is_being_debugged" DEBUG
function do_this_if_it_is_being_debugged() {
...
}
注意,这需要在set -x被执行之前执行
【讨论】:
在$SHELLOPTS 中查找xtrace。
例如:
if grep -q xtrace <<<"$SHELLOPTS"; then
DO_SOMETHING;
fi
【讨论】: