You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么执行`ls not_existing_file 2>&1 > log.txt`时log.txt为空

问题原因

这是shell重定向的执行顺序导致的,shell会从左到右依次执行重定向规则,你给出的命令执行逻辑如下:

  1. 先执行2>&1:此时标准输出(stdout)还未被重定向,默认指向终端,所以这一步会把标准错误(stderr)的输出指向也设为终端
  2. 再执行> log.txt:这一步才将标准输出的指向修改为log.txt文件,但之前已经绑定到终端的标准错误不会同步变更指向

你执行的ls not_existing_file命令因为目标文件不存在,所有输出内容都走标准错误通道,最终错误内容输出到了终端,标准输出没有任何内容,所以写入log.txt的内容为空。

正确写法

如果要把标准输出和标准错误都重定向到同一个文件,有两种常用写法:

  • 调整重定向顺序,先把stdout指向文件,再把stderr绑定到stdout:
    ls not_existing_file > log.txt 2>&1
  • 如果你使用Bash、Zsh等支持简化语法的shell,可以直接用合并重定向语法:
    ls not_existing_file &> log.txt

内容的提问来源于stack exchange,提问作者zwithouta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:45:02