bash,在命名管道中发球?

bash,在命名管道中发球?,bash,pipe,tee,Bash,Pipe,Tee,以下代码: #!/bin/bash -x mkfifo pipe 2>/dev/null tee pipe >/dev/null & cat pipe 按如下方式运行时不产生输出: $ echo "hi" | ./test.sh + mkfifo pipe + cat pipe + tee pipe $ 为什么?!我希望tee将stdin复制到命名管道(和/dev/null),然后cat将命名管道的内容复制到stdout。为什么不起作用 我正试图编写一个更大的bash脚本

以下代码:

#!/bin/bash -x
mkfifo pipe 2>/dev/null
tee pipe >/dev/null &
cat pipe
按如下方式运行时不产生输出:

$ echo "hi" | ./test.sh
+ mkfifo pipe
+ cat pipe
+ tee pipe
$
为什么?!我希望
tee
将stdin复制到命名管道(和
/dev/null
),然后
cat
将命名管道的内容复制到stdout。为什么不起作用


我正试图编写一个更大的bash脚本,我真的需要
tee
在那里,在
/dev/null
的地方放上其他东西。我将意外行为的范围缩小到上面的示例中。

当您对流程进行后台处理时,其标准输入将设置为
/dev/null

#!/bin/bash -x
mkfifo pipe 2>/dev/null
cat - | tee pipe >/dev/null &
cat pipe

因此,您需要指定您想要父级的
stdin
,在您的情况下是
echo
/test.sh

之间的管道,请尝试更改为
取消缓冲cat管道
。您可能需要搜索机器以取消缓冲,然后使用完整路径调用,或者将路径添加到path变量中。或者,不要重复“hi”,而是将一个相当大的文件输入到您的./test.sh中。祝你好运。我奇怪地尝试了
/test.sh,
cat | tee pipe>/dev/null
工作正常。但为什么?!