有没有办法打印 shell 内置“source”在获取脚本时调用的命令?

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)

Kus*_*nda 6

是的,您可以在获取点脚本之前使用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)

请注意,如果您源脚本设置或取消设置xtraceshell 选项,您可能无法获得预期的输出。