Bash 如何在stdout中显示命令输出并将其传输到管道

Bash 如何在stdout中显示命令输出并将其传输到管道,bash,Bash,假设我有一个休闲cmd: ls | grep dir 如果有文件夹的名称包含dir,我会看到它们。 如果没有,那么我将根本看不到任何输出 现在,我想看到的是ls命令的输出,然后还要看到grep之后的最终输出 让我们这样说: >>ls | grep dir filea fileb filec filed dir1 dir2 dir1 dir2 其中前两行是ls的结果,后两行是grep命令的结果 我该怎么做呢?我有点作弊,但你不能一个接一个地执行这两个命令吗? 例如(添加回音以

假设我有一个休闲cmd:

ls | grep dir
如果有文件夹的名称包含
dir
,我会看到它们。 如果没有,那么我将根本看不到任何输出

现在,我想看到的是
ls
命令的输出,然后还要看到
grep
之后的最终输出

让我们这样说:

>>ls | grep dir
filea fileb filec
filed dir1  dir2

dir1 
dir2
其中前两行是
ls
的结果,后两行是
grep
命令的结果


我该怎么做呢?

我有点作弊,但你不能一个接一个地执行这两个命令吗? 例如(添加回音以在它们之间留出一些空间):


最简单的方法是运行ls两次:

ls; ls -1 | grep dir
请注意-1选项。grep是面向行的,这就是为什么ls应该每行打印一个dir条目

ls |tee /dev/tty |grep dir

将这样做,尽管它不会在两个部分之间留出空间。

-1
仅在输出为终端时才有必要;当写入管道或文件时,
-1
实际上是隐含的。检查此ls | tee/dev/tty | grep Public,您可以使用tty命令查找终端并将其替换为charm:)THX
ls |tee /dev/tty |grep dir