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

将Here Document绑定到文件描述符3并复制给cat标准输入失败,求解决

问题分析与解决方法

咱们先拆解下你脚本里的问题,然后一步步修正:

原脚本的核心错误

  1. cat 3<<222889 写法逻辑错位:
    这里的 3<<222889 确实把Here Document绑定到了文件描述符3,但cat命令后面的3会被当成普通文件名处理——cat会尝试打开名为"3"的文件,而非读取文件描述符3的内容,这完全偏离了你的需求。
  2. 单独的 0<&3 无效:
    这行是独立的命令,而Here Document结束后,关联的文件描述符3会被系统自动关闭,此时再执行0<&3根本找不到可用的fd3,自然没效果。

正确的实现方式

这里提供两种实用写法,你可以按需选择:

方式一:让cat直接读取文件描述符3

先把Here Document绑定到fd3,再通过<&3让cat读取这个描述符的内容:

#!/bin/bash
3<<222889
I am reading a string into file descriptor 3 which is copied to standard input
222889
cat <&3

方式二:将fd3复制到cat的标准输入

在执行cat时,把fd3重定向到stdin(文件描述符0),这样cat默认读取stdin就能拿到内容:

#!/bin/bash
3<<222889
I am reading a string into file descriptor 3 which is copied to standard input
222889
0<&3 cat

更紧凑的合并写法

可以把重定向和cat命令写在同一行,逻辑更简洁:

#!/bin/bash
cat 0<&3 3<<222889
I am reading a string into file descriptor 3 which is copied to standard input
222889

原理补充

当你用n<<delimiter时,系统会创建临时文件/管道,将文件描述符n绑定到它,直到遇到结束符delimiter。如果要让命令读取这个fd的内容,要么用<&n把fd n复制到stdin,要么让命令直接读取fd n(cat默认读stdin,所以需要重定向操作)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:31:44