mar*_*hon 1 shell bash zsh shell-builtin
sh、bash 等都有一个-x
标志,可以显示脚本中正在执行的每个命令。这对于调试来说很方便。
$ sh -x my_script.sh
+ case $SOMETHING_DIR in
+ unset SOMETHING_SCRIPT_SOURCE
+ something_process_parameters
+ local SOMETHING_AUTO_MODE
+ SOMETHING_AUTO_MODE=use
+ something_supports_source_options
++ something_echo '[ $# -gt 0 ] && something_echo $1'
++ command printf '%s\n' '[ $# -gt 0 ] && something_echo $1'
++ . /dev/stdin yes
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点source
?
$ source my_source.sh
Run Code Online (Sandbox Code Playgroud)
是的,您可以在获取点脚本之前使用set -x
(或set -o xtrace
) 在当前 shell 中启用跟踪,然后使用set +x
(或set +o xtrace
) 禁用跟踪。
set -x
source ./my_source.sh
set +x
Run Code Online (Sandbox Code Playgroud)
请注意,如果您源脚本设置或取消设置xtrace
shell 选项,您可能无法获得预期的输出。