如何将标准输出到进程和 shell 屏幕

如何将标准输出到进程和 shell 屏幕

有人知道将一个命令的标准输出发送到另一个命令并将其显示在 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或内存缓冲。

相关内容