0
以下代码:运行时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
的地方。我缩小了上述例子的意外行为。
尝试之间的管道改为'非缓冲猫管道'。您可能必须搜索未缓存的计算机,并使用完整路径进行调用,或将路径添加到PATH变量。或者,而不是回声“嗨”,将一个非常大的文件放到你的./test.sh文件中。祝你好运。 – shellter
我试过'./test.sh <〜/ .xsession-errors',大概1Mb,但还是什么都没有。 –
奇怪的是,'猫| tee pipe>/dev/null'按预期工作。但为什么?! –