wei@linux-bk6x:~/bin> cdrecord --help >cdrecord.txt
Usage: wodim [options] track1...trackn
Options: 省略若干字
wei@linux-bk6x:~/bin> rm --help >rm.txt
wei@linux-bk6x:~/bin>
看见没 cdrecord --help >cdrecord.txt 重定向失败了,而 rm --help >rm.txt 却成功了。为什么是这样呢?
wei@linux-bk6x:~/bin> cdrecord --help >cdrecord.txt
Usage: wodim [options] track1...trackn
Options: 省略若干字
wei@linux-bk6x:~/bin> rm --help >rm.txt
wei@linux-bk6x:~/bin>
看见没 cdrecord --help >cdrecord.txt 重定向失败了,而 rm --help >rm.txt 却成功了。为什么是这样呢?
cdrecord --help 输出到 stderr, 要用 2> outpu.txt 重定向。
rm --help 输出到 stdout,所以成功了,如果你用 BSD 的 rm 就会失败,因为它也是输出到 stderr 的。
或者用 &> 可以同时重定向 stderr 和 stdout,这就万无一失了。
wiki.bash-hackers.org/syntax/redirection
whatever.txt
等价于
1> whatever.txt
其中:
文件描述符 类别
0 默认输入(stdin)
1 默认输出(stdout)
2 错误输出(stderr)
rm 的 --help 输出到了 stdout,所以能被 >rm.txt 重定向 ; cdrecord --help 输出到了 stderr,所以你用 >cdrecord.txt 实际上是重定向 stdout 的内容,为空,所以生成了一个空的 cdrecord.txt 同时把 stderr 也就是 --help 的内容打印在了你的屏幕上。
用
cdrecord --help 2>cdrecord.txt
可以成功打印。或者像楼上所说:
cdrecord --help &>cdrecord.txt
这个命令等价于
cdrecord --help 1>cdrecord.txt 2>&1
即先把 stderr 重定向到 stdout,再把 stdout 重定向到文件。