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

在Bash中如何将文件与echo输出拼接后通过标准输入传递给可执行程序

在Bash中如何将文件与echo输出拼接后通过标准输入传递给可执行程序

看起来你是要把多个来源的内容(文件内容+手动插入的标识字符串)按顺序拼起来,通过标准输入传给那个只能读stdin的C++程序对吧?之前试的命令没得到预期结果,主要是没摸透cat命令的小细节,我来给你理清楚。

首先说核心问题:你之前写的cat < file1.txt <(echo "EOF") file2.txt | ./file之所以只输出了EOF和output,是因为cat的运行规则——只要给它传了文件名参数(比如这里的<(echo "EOF")和file2.txt),它就会直接读这些文件,完全忽略通过重定向(< file1.txt)传给它的标准输入内容,所以file1.txt的内容根本没被读进去!

那正确的写法有两种,都能完美满足你的需求:

方法一:直接用cat按顺序读取所有输入源(简洁写法)

直接把file1.txt作为cat的参数,和后面的匿名管道、file2.txt排在一起,这样cat就会按顺序读取这三个"文件"的内容并合并:

cat file1.txt <(echo "EOF") file2.txt | ./file

运行这个命令后,你的./file程序就会输出:

input
EOF
output

方法二:用命令分组直观拼接(新手友好)

如果你觉得匿名管道的写法有点绕,用括号把几个命令分组也是一样的效果——括号里的命令会在子shell中执行,它们的标准输出会被合并成一个流,再通过管道传给./file:

( cat file1.txt; echo "EOF"; cat file2.txt ) | ./file

这个写法逻辑更直白:先输出file1.txt的内容,再输出EOF字符串,最后输出file2.txt的内容,三者无缝拼接成一个输入流。

另外如果需要处理特殊字符(比如复杂转义字符),用printf代替echo会更可靠,比如:

( cat file1.txt; printf "EOF\n"; cat file2.txt ) | ./file

这样调整后,你的C++程序就能完整读到所有内容,输出你想要的结果啦~

备注:内容来源于stack exchange,提问作者fghoussen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:24:33