我正在尝试回答这个实验室问题。有没有办法不使用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
确保它也被打印并保存到文件中。