RedHat Linux中SH脚本set -x输出如何通过tee写入文件?
解决Shell脚本中set -x输出同时写入文件和屏幕的问题
你之前的方法没用,核心原因是set -x的调试输出是发往**标准错误(stderr)**的,而管道|默认只捕获标准输出(stdout),导致tee接不到任何内容,最终生成空文件。下面给你两种可行的实现方案:
方案一:脚本内部重定向stderr到tee
直接在脚本开头替换原有写法,添加以下两行:
# 把所有stderr输出转交给tee,同时输出到屏幕和调试文件 exec 2> >(tee -a scriptname.debug) set -x
exec 2> >(tee ...):让当前shell的所有标准错误输出,通过进程替换传递给tee命令,既会实时显示在屏幕上,又会追加写入到scriptname.debug文件中。- 若不需要追加内容,每次运行覆盖旧文件,把
tee -a改成tee即可。
方案二:运行脚本时外部重定向
如果不想修改脚本内容,也可以在启动脚本时直接做重定向处理:
sh -x your_script.sh 2>&1 | tee scriptname.debug
这里2>&1把标准错误输出合并到标准输出,再通过tee同时输出到屏幕和文件。
调试完成后,只需注释掉脚本里的exec行和set -x,就能恢复脚本正常运行状态。
内容的提问来源于stack exchange,提问作者DanL
相关产品推荐
相关产品推荐

