如何将bash命令输出到stdout,同时将管道输出到另一个命令?

如何将bash命令输出到stdout,同时将管道输出到另一个命令?,bash,ubuntu,pipe,piping,Bash,Ubuntu,Pipe,Piping,我在服务器上工作,为了显示详细的GPU信息,我使用以下命令: nvidia-smi ps -up `nvidia-smi |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3` 但是,正如您所看到的,nvidia smi被调用了两次。如何使nvidia smi的输出转到output并同时通过管道传输到另一个命令 使用三通: 由于stdout是通过管道传输的,所以无法复制到它,所以我选择stderr来显示输出 如果/dev/

我在服务器上工作,为了显示详细的GPU信息,我使用以下命令:

nvidia-smi
ps -up `nvidia-smi |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3` 
但是,正如您所看到的,nvidia smi被调用了两次。如何使nvidia smi的输出转到output并同时通过管道传输到另一个命令

使用三通:

由于stdout是通过管道传输的,所以无法复制到它,所以我选择stderr来显示输出


如果/dev/stderr不可用,请使用/proc/self/fd/2。

我已经在服务器上测试过了,它成功了!非常感谢你!虽然使用/dev/stderr有点奇怪。。。此命令是否转储到错误日志文件或其他文件?对不起,我对这方面不太了解Bash@DangManhTruong每个程序都有两个默认的输出文件描述符,标准输出和标准错误。通常这两个都是从父进程继承的,在您的情况下,是从外壳继承的,两者都连接到了终端。@Dangmanchuong Standard Error不是任何系统错误日志文件。这只是程序的另一个标准输出流。
ps -up `nvidia-smi |tee /dev/stderr |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3`