Bash重定向失效,git clone输出未写入log.txt仍显示在终端
问题原因
shell处理重定向的顺序是从左到右逐段解析,你写的2>&1 > log.txt执行逻辑如下:
- 第一步先执行
2>&1:此时标准输出(文件描述符1)默认指向终端,所以这条指令会把标准错误(文件描述符2)绑定到终端的输出流 - 第二步再执行
> log.txt:仅把标准输出(文件描述符1)的指向修改为log.txt文件,不会影响已经绑定到终端的标准错误流
另外git类命令的进度提示、克隆状态等常规输出默认会打印到标准错误流,而非标准输出流,所以最终所有git输出都留在了终端,标准输出没有内容写入log.txt,导致日志文件为空。
修复方案
调整重定向顺序,先指定标准输出的目标,再把标准错误绑定到标准输出即可:
- 方案1:兼容所有POSIX标准shell的写法
git clone https://github.com/ITdairy/whatsapp-for-linux > log.txt 2>&1
- 方案2:Bash、Zsh等常用shell支持的简化写法,效果完全一致
git clone https://github.com/ITdairy/whatsapp-for-linux &> log.txt
内容的提问来源于stack exchange,提问作者cycool29
相关产品推荐
相关产品推荐

