Barooh Asked: 2012-06-08 02:12:44 +0800 CST2012-06-08 02:12:44 +0800 CST 2012-06-08 02:12:44 +0800 CST 如何将标准输出同时输出到进程和 shell 屏幕 772 有人知道将命令的标准输出发送到另一个命令并将其显示在 shell 屏幕上的方法吗?注意:不使用文件。 一个例子(在这种情况下我使用 wc -l 来简化它) ~> echo "test" | wc -l 1 但我需要有 test 1 我试过 tee 命令,希望它能做到,但它返回同样的东西 ~> echo "test" | tee | wc -l 1 有任何想法吗?谢谢 bash stdout tee 2 个回答 Voted DukeLion 2012-06-08T02:19:46+08:002012-06-08T02:19:46+08:00 您可以使用带 tee 的命名管道来完成此操作。 创建命名管道: mkfifo /tmp/testpipe 使用 tee 将输出复制到标准输出和管道:echo "test" | tee /tmp/testpipe 此时您的命令将挂起,因为没有任何内容连接到管道输出。您需要在不同的 shell 中运行cat /tmp/testpipe | wc -l 命名管道是一个文件,但它既不做磁盘 io 也不做内存缓冲。 Best Answer Khaled 2012-06-08T02:23:33+08:002012-06-08T02:23:33+08:00 很清楚您希望如何格式化输出。甚至,如果您使用tee输出将被重定向到wc -l. 因此,您将看不到 的输出echo。 我可以想到一种解决方法,通过将echo输出wc -l发送到终端stdout并stderr使用: $ echo "test" | tee /dev/stderr | wc -l test 1 这样你们都将通过stdout和发送到您的终端stderr。 使用@DukeLion 发布的命名管道的想法也是一个不错的想法。
您可以使用带 tee 的命名管道来完成此操作。
创建命名管道:
mkfifo /tmp/testpipe
使用 tee 将输出复制到标准输出和管道:
echo "test" | tee /tmp/testpipe
此时您的命令将挂起,因为没有任何内容连接到管道输出。您需要在不同的 shell 中运行
cat /tmp/testpipe | wc -l
命名管道是一个文件,但它既不做磁盘 io 也不做内存缓冲。
很清楚您希望如何格式化输出。甚至,如果您使用
tee
输出将被重定向到wc -l
. 因此,您将看不到 的输出echo
。我可以想到一种解决方法,通过将
echo
输出wc -l
发送到终端stdout
并stderr
使用:这样你们都将通过
stdout
和发送到您的终端stderr
。使用@DukeLion 发布的命名管道的想法也是一个不错的想法。