清单 4. 带有 noclobber 选项的输出重定向
[ian@echidna lpi103-4]$ set -o noclobber
[ian@echidna lpi103-4]$ ls x* z* >stdout.txt 2>stderr.txt
-bash: stdout.txt: cannot overwrite existing file
[ian@echidna lpi103-4]$ ls x* z* >|stdout.txt 2>|stderr.txt
[ian@echidna lpi103-4]$ cat stdout.txt
xaa
xab
[ian@echidna lpi103-4]$ cat stderr.txt
ls: cannot access z*: No such file or directory
[ian@echidna lpi103-4]$ set +o noclobber #restore original noclobber setting
在某些情况下,您可能想要将标准输出和标准错误都重定向到一个文件中。这通常为自动进程或后台作业而执行的,以便以后可以查看输出。使用 &> 或 &>> 同时将标准输出和标准错误重定向到同一个文件中。另一种方法是,首先重定向文件描述符 n,然后使用 m>&n 或 m>>&n 将文件描述符 m 重定向到同一个文件。例如,
command 2>&1 >output.txt
不同于
command >output.txt 2>&1
在第一种情况中,stderr 被重定向到 stdout 的当前位置,然后在将 stdout 重定向到 output.txt,但第二次重定向仅影响 stdout,不影响 stderr。在第二种情况中,stderr 被重定向到 stdout 的当前位置,即 output.txt。我们在清单 5 中显示了这些重定向。注意,在最后一个命令中先重定向标准错误在重定向标准输出,所以标准错误输出仍然打印在终端窗口中。
清单 5. 将两个流重定向到一个文件中
[ian@echidna lpi103-4]$ ls x* z* &>output.txt [ian@echidna lpi103-4]$ cat output.txt ls: cannot access z*: No such file or directory xaa xab [ian@echidna lpi103-4]$ ls x* z* >output.txt 2>&1 [ian@echidna lpi103-4]$ cat output.txt ls: cannot access z*: No such file or directory xaa xab [ian@echidna lpi103-4]$ ls x* z* 2>&1 >output.txt # stderr does not go to output.txt ls: cannot access z*: No such file or directory [ian@echidna lpi103-4]$ cat output.txt xaa xab
不过,有时候您可能想要完全忽略标准输出或标准错误。为此,将选择的流重定向到空文件 /dev/null。清单 6 显示了如何从 ls 命令忽略错误输出,同时也使用 cat 命令显示 /dev/null 是空的。
清单 6. 使用 /dev/null 忽略输出
[ian@echidna lpi103-4]$ ls x* z* 2>/dev/null xaa xab [ian@echidna lpi103-4]$ cat /dev/null