首页 > 解决方案 > 管道标准输出到另一个进程的文件描述符

问题描述

到目前为止,这一直在挫败我。我知道如何将我的标准输出重定向到同一进程中的另一个文件描述符。我知道如何将标准输出通过管道传输到另一个进程的标准输入。但是,如果我想将一个进程的标准输出通过管道传输到另一个进程中的文件描述符怎么办?具体来说,对于 while read 的情况...

  cat file | while read -u 9 line; do //some stuff; done

如何将 cat 的输出放到 while 循环的文件描述符 9 上?

标签: bash

解决方案


管道专门用于标准输入和输出(文件描述符 0 和 1);它们不会推广到其他描述符。请改用进程替换和输入重定向。

while read -u 9 line; do
  ...
done 9< <(cat file)

当然,你不应该这样使用cat;只需使用常规输入重定向

while read -u 9 line; do
  ...
done 9< file

奖金,符合 POSIX 的答案:使用命名管道。

mkfifo p
cat file > p &
while read line <&9; do
  ...
done 9< p

推荐阅读