Unix重定向保存terraform plan输出时无法捕获错误消息如何处理
问题原因
Unix 类系统中程序的输出分为两个独立的数据流:
- 标准输出(stdout,文件描述符 1):用于输出程序正常执行的结果
- 标准错误(stderr,文件描述符 2):专门用于输出错误、告警类信息
你之前使用的>重定向默认仅捕获标准输出流,错误信息会直接输出到终端不会写入文件,因此报错时生成的文件为空。
解决方法
1. 正常输出和错误信息写入同一个文件
如果你不需要区分两类输出,直接合并写入同一个文件即可:
tf plan -no-color > plan.txt 2>&1
其中 2>&1 的作用是将标准错误流的输出重定向到标准输出流指向的位置。
如果你使用的是 bash、zsh 等现代 Shell,也可以用简化写法:
tf plan -no-color &> plan.txt
2. 正常输出和错误信息分开存储
如果希望两类内容分文件存储、方便后续排查,使用以下写法:
tf plan -no-color > plan.txt 2> plan-error.txt
执行成功时 plan-error.txt 为空,报错时错误信息会单独存入该文件,不会和正常执行结果混淆。
3. 同时输出到终端和文件
如果你需要实时在终端查看执行进度,同时把内容留存到文件,可以搭配 tee 命令使用:
# 所有输出既展示在终端,也写入 plan.txt tf plan -no-color 2>&1 | tee plan.txt
内容的提问来源于stack exchange,提问作者bryanchubh
相关产品推荐
相关产品推荐

