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

如何重定向赋值给变量的文件描述符?bash脚本异常排查

Bash 文件描述符捕获问题解答

问题1:不使用eval时如何捕获最后一次echo_fd的输出?

直接让fd变量指向当前的标准错误流(即数字2),而非之前通过exec保存的fdb变量。或者修改echo_fd函数,当需要输出到当前上下文的stderr时,直接使用>&2重定向,而非依赖预先绑定的文件描述符变量。

具体调整示例:

# 最后一次运行时,将fd设置为2而非fdb
fd=2
echo_fd "three"

这样输出会直接进入当前被重定向的stderr,从而被2> capture.txt捕获。

问题2:未捕获到输出的原因

当执行exec {fdb}>&2时,bash会复制当前进程的stderr(2号文件描述符)的文件表项,创建一个新的文件描述符(比如10)并将其编号存入fdb变量——这相当于给原始stderr做了一个"快照"。

后续执行./run3 2> capture.txt时,只是修改了当前进程的2号文件描述符,使其指向capture.txt,但fdb对应的那个新文件描述符(比如10)仍然指向最初的stderr(通常是终端)。因此echo_fd通过>&$fd(即>&10)输出的内容会直接发送到原始stderr,不会被2> capture.txt的重定向规则捕获;只有run3进程直接输出到2号文件描述符的内容才会被写入capture.txt。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:33:25