有没有办法在脚本中强制启用或禁用每个命令行的调试(xtrace)?
在 Windows Shell(“ms-dos”)中,“@”可以作为命令行前缀,如果启用了回显(可以说调试)(回显打开),则禁用显示该行。
考虑 xtrace on (set -x),但我们可以在某些行中忽略它的效果,并在其前面加上“@”。就像:
set -x
@echo Listing...
ls
set +x
输出示例:
Listing...
+ ls
file1
file2
shell脚本中有类似的东西吗?
答案1
我不知道有任何 shell 有这样的运算符。然而,对于大多数 shell(ksh 是例外),您可以xtrace
通过以下方式静默切换:
{
case $- in
(*x*) set +x;;
(*) set -x
esac
} 2> /dev/null
所以你可以将其设为别名:
alias 'xx={
case $- in
(*x*) set +x;;
(*) set -x
esac
} 2> /dev/null'
并用作:
set -x
echo traced
xx; echo not traced; xx
echo traced
set +x
请注意,使用 bash,您需要shopt -s expand_aliases
在非交互式 shell 中扩展别名(如在脚本中)。