似乎有两个bash惯用法将STDOUT和STDERR重定向到一个文件:
fooscript &> foo
......而且......
fooscript > foo 2>&1
有什么不同?在我看来,第一个只是第二个的快捷方式,但我的同事认为,即使初始重定向出错,第二个也不会产生输出,而第一个会将重定向错误吐出到STDOUT.
编辑:好的......似乎人们不理解我的要求,所以我会尽力澄清:
任何人都可以给我一个例子,上面写的两个特定的行行会产生不同的行为吗?
从bash手册:
重定向标准输出和标准错误有两种格式:
&>word和
>&word在这两种形式中,第一种是优选的.这在语义上等同于
>word 2>&1
"语义上等同"这一短语应该与您的同事解决问题.
两行具有不同行为的情况是你的脚本没有在bash中运行,而是sh系列中的一些更简单的shell,例如dash(我认为在某些Linux发行版中它被用作/ bin/sh,因为它比庆典).在这种情况下,
fooscript &> foo
被解释为两个命令:第一个命令在后台运行fooscript,第二个命令截断文件foo.命令
fooscript > foo 2>&1
在前台运行fooscript并将其输出和标准错误重定向到文件foo.在bash中我认为这些行总是会做同样的事情.