我已经阅读了有关I / O重定向的bash文档。我在macOS上运行GNU bash 5.0.2。我关于文件描述符如何在这里工作的思维模型显然缺少了一些东西,但是我还不太清楚。
方案:我有一个二进制文件(名为“ ./hello”),该文件在固定文件描述符上输出一行文本。
int main() {
write(25, "Hello\n",6);
return 0;
}
我不想编辑该程序。我想让它以已经打开的fd 25开始。
为完成这项工作,我启动了另一个程序,该程序从stdin读取并进行一些处理。
coproc ./processor
[1] 38642
为了将这两件事结合在一起,我尝试过:
# This does not work, but I wish it would.
./hello 25>&${COPROC[1]}
执行此操作时,处理器未收到任何输入。但是,可以进行以下操作:
# This works.
date >&${COPROC[1]}
以下内容也适用:
# This works.
./hello 25>test.txt
cat test.txt
Hello
据我了解,在fork()时会保留fd,因此应该在子进程上打开fd 25吗?