9.4 重定向标准错误输出
bash和tcsh都使用大于号(>)进行标准输出重定向,但tcsh并不使用bash符号2>重定向标准错误输出。在tcsh中,可以使用大于号后面跟着逻辑与符号(>&)组合来重定向标准输出和标准错误输出。尽管也可以在bash下面使用这种符号,但是毕竟不通用。与第8.2.3节中的bash示例一样,下面的这些示例引用了两个文件,其中文件x并不存在,文件y只包含了一行文本。
tcsh $ cat x
cat: x: No such file or directory
tcsh $ cat y
This is y.
tcsh $ cat x y >& hold
tcsh $ cat hold
cat: x: No such file or directory
This is y.
在这个示例中,cat带有一个参数y,将字符串发送到标准输出。而参数x将使cat发送一条错误消息到标准错误输出。
与bash不同,tcsh并没有提供将标准输出和标准错误输出分别重定向的一个简单的方法。工作区(work-around)通常提供一种合理的解决方案。下面的示例在一个子shell中运行带参数x和y的cat(圆括号确保括号中的命令在子shell中运行,参见第8.2.5节)。在这个子shell中>将标准输出重定向到文件outfile中。发送到标准错误输出的输出并没有被子shell改变,而是发送到父shell,父shell将该错误输出和标准输出一起发送到文件errfile中。又因为标准输出已经被重定向,所以errfile将只包含发送到标准错误输出的内容。
tcsh $ (cat x y > outfile) >& errfile
tcsh $ cat outfile
This is y.
tcsh $ cat errfile
cat: x: No such file or directory
如果想在后台运行一个慢速的命令,并且不希望它的输出扰乱终端屏幕,那么组合和重定向输出会很有用。举例来说,因为find工具一般都需要较长时间才能执行完毕,所以将其放在后台执行就是一个很好的办法。下面的这条命令在文件系统分层结构中查找名字中包含字符串biblio的所有文件。这条命令在后台运行,并将其输出发送到findout文件中。因为find工具会向标准错误输出发送报告,说明用户没有搜索权限的目录,所以findout文件不但记录搜索到的那些文件,还记录了那些未能搜索的目录。
tcsh $ find / -name "*bib1io*" -print >& findout &
在这个示例中,如果没有将标准错误输出和标准输出组合,而是仅仅重定向标准输出,那么错误消息将出现在屏幕上,文件findout将只包含搜索到的那些文件。
如果将某条命令在后台执行,并将其输出重定向到某个文件,那么可以使用tail带-f选项来查看输出。-f选项使tail显示那些正在被写入到该文件的文本行:
tcsh $ tail -f findout
要想终止tail命令,按下中断键(通常就是CONTROL+C组合键)。






