0

以下代码:

#!/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将标准输入复制到命名管道(和/dev/null),然后cat将命名管道的内容复制到标准输出。为什么它不起作用?!

我正在尝试编写一个更大的 bash 脚本,我真的需要tee在其中,用其他东西代替/dev/null. 我将意外行为缩小到上面的示例。

4

1 回答 1

2

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

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

所以你需要指定你想要的stdin父级,在你的情况下是和之间的echo管道./test.sh

于 2013-01-16T04:02:06.967 回答