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

bash/zsh执行重定向操作时会保留哪些文件描述符副本?

解答
  • 你观察到的bash的255u、zsh的10u都是对应shell预留的私有文件描述符,不属于用户可随意使用的fd范围,你提到的“重定向时保留的副本”指的是shell启动时继承到的、与当前交互终端绑定的原始标准输入(0)、标准输出(1)、标准错误(2)的统一备份,不是仅针对标准输出的副本。
  • 这个备份的核心作用是保障重定向操作后shell可以正常恢复标准流:
    • 当你执行重定向操作时(比如单次命令的echo test > a.txt,或者全局重定向exec 1> a.txt),shell会修改对应标准fd的指向,临时绑定到目标文件/管道上
    • 如果没有提前备份原始的标准流指向,重定向完成后shell就无法找回原来的终端交互句柄,会出现执行完重定向命令后,后续输出没法打印到终端、没法接收用户输入的问题
    • 有了这个私有备份fd,shell在重定向逻辑结束后,直接把标准fd重新指向备份fd对应的终端设备,就能快速恢复到初始交互状态
  • 你可以自行测试验证:直接打开bash执行ls -l /proc/$$/fd/255,会看到该fd的指向和当前0、1、2号fd完全一致,都是当前的交互终端设备;执行exec 1> test.txt后查看fd1会指向test.txt,但255号fd依然指向原始终端,执行exec 1>&255即可恢复标准输出到终端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:24:03