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
工作正常。但为什么?!