以下代码:
#!/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
的其他内容。我将意外行为缩小到上面的例子。
答案 0 :(得分:1)
当您对流程进行后台处理时,其标准输入将设置为/dev/null
#!/bin/bash -x
mkfifo pipe 2>/dev/null
cat - | tee pipe >/dev/null &
cat pipe
因此,您需要指定父级的stdin
,在您的情况下,需要echo
和./test.sh
之间的管道