当前位置:  开发笔记 > 编程语言 > 正文

"&> foo"和"> foo 2>&1"之间有什么区别?

如何解决《"&>foo"和">foo2>&1"之间有什么区别?》经验,为你挑选了2个好方法。

似乎有两个bash惯用法将STDOUT和STDERR重定向到一个文件:

fooscript &> foo

......而且......

fooscript > foo 2>&1

有什么不同?在我看来,第一个只是第二个的快捷方式,但我的同事认为,即使初始重定向出错,第二个也不会产生输出,而第一个会将重定向错误吐出到STDOUT.

编辑:好的......似乎人们不理解我的要求,所以我会尽力澄清:

任何人都可以给我一个例子,上面写的两个特定的行行会产生不同的行为吗?



1> Bruno De Fra..:

从bash手册:

重定向标准输出和标准错误有两种格式:

&>word

>&word

在这两种形式中,第一种是优选的.这在语义上等同于

 >word 2>&1

"语义上等同"这一短语应该与您的同事解决问题.



2> Jouni K. Sep..:

两行具有不同行为的情况是你的脚本没有在bash中运行,而是sh系列中的一些更简单的shell,例如dash(我认为在某些Linux发行版中它被用作/ bin/sh,因为它比庆典).在这种情况下,

fooscript &> foo

被解释为两个命令:第一个命令在后台运行fooscript,第二个命令截断文件foo.命令

fooscript > foo 2>&1

在前台运行fooscript并将其输出和标准错误重定向到文件foo.在bash中我认为这些行总是会做同样的事情.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有