本地能跑、CI 却失败时,可以先让 Bash 打印实际执行过的命令,不用到处加 echo:
bash -x ./build.sh 2>trace.log
想把跟踪单独写到文件,并带上脚本名和行号,可以这样:
exec 7>trace.log
export BASH_XTRACEFD=7
export PS4='+ ${BASH_SOURCE}:${LINENO}: '
bash -x ./build.sh
exec 7>&-
环境:Bash 4+,Linux 或 macOS。注意跟踪会把展开后的参数写出来,命令行里有令牌、密码或个人路径时别直接上传 CI 日志。