将输出打印在屏幕上并重定向到文件并将错误转发到另一个文件

将输出打印在屏幕上并重定向到文件并将错误转发到另一个文件

我正在尝试回答这个实验室问题。有没有办法不使用tee命令来解决这个问题?

作为 server1 上的 user1,ls/etc/dvd和上运行命令/var。将输出打印在屏幕上并重定向到文件/tmp/ioutput,并将错误转发到文件/tmp/ioerror。命令执行后检查两个文件并分析结果。 (提示:输入、输出和错误重定向)。

如果我这样尝试,输出不会打印在屏幕上。

[user1@server1 ~]$ ls /etc /dvd /var 1> /tmp/ioutput 2> /tmp/ioerror

如果我与tee命令一起使用,错误文件为空。

ls /etc /dvd /var | tee /tmp/ioutput 2> /tmp/ioerror

有没有办法只使用重定向运算符来解决它?

答案1

只需使用tee.但要获得标准错误输出,需要重定向原始程序的标准错误。管道 ( |) 仅将标准输出传递给tee,这就是错误文件为空的原因。你想要的是:

ls /etc /dvd /var 2> /tmp/ioerror | tee /tmp/ioutput 

如果您想在屏幕上看到 stderr 和 stdout,请尝试以下操作:

ls /etc /dvd /var 2> >(tee /tmp/ioerror) | tee /tmp/ioutput 

这将首先将 stderr 重定向到tee /tmp/ioerror,这意味着您将在屏幕上看到它并将其保存在文件中,然后它通过管道传输 stdout 以tee /tmp/ioutput确保它也被打印并保存到文件中。

相关内容