有人知道将一个命令的标准输出发送到另一个命令并将其显示在 shell 屏幕上的方法吗?注意:不使用文件。
一个例子(在这个例子中我使用 wc -l 来使其简单)
~> echo "test" | wc -l
1
但我需要
test
1
我尝试过 tee 命令,希望它能做到这一点,但它返回的是相同的结果
~> echo "test" | tee | wc -l
1
有什么想法吗?谢谢
答案1
输出格式非常清晰。即使使用 ,tee
输出也会重定向到wc -l
。因此,您将看不到 的输出echo
。
我可以想到一种解决方法,通过将echo
输出和发送wc -l
到终端来stdout
同时stderr
使用:
$ echo "test" | tee /dev/stderr | wc -l
test
1
这样,您将通过stdout
和发送到您的终端stderr
。
@DukeLion 提出的使用命名管道的想法也很好。
答案2
您可以使用带有 tee 的命名管道来完成此操作。
创建命名管道: mkfifo /tmp/testpipe
使用 tee 将输出复制到 stdout 和管道:echo "test" | tee /tmp/testpipe
此时你的命令将挂起,因为没有任何内容连接到管道输出。你需要在不同的 shell 中运行cat /tmp/testpipe | wc -l
命名管道是一个文件,但它不会执行磁盘io或内存缓冲。