将 stdout 和 stderr 一起重定向 VS 将 stdout 然后 stderr 重定向到 stdout 的文件

将 stdout 和 stderr 一起重定向 VS 将 stdout 然后 stderr 重定向到 stdout 的文件

这个重定向有什么区别

some-program &> some_file

和这个?

some-program > some_file 2>&1

答案1

bashzshshell 中,两者没有区别。重定向&>file是作为 POSIX 标准的扩展实现的语法糖,其含义与标准完全相同>file 2>&1

请注意,在由非/解释器&>执行的脚本中使用重定向可能会以有趣的方式破坏您的脚本,因为和会被相互独立地解释。bashzsh&>

some_command &>file

在非-bash/zsh脚本中,将与

some_command & >file

并作为

some_command &
>file

some_command作为后台作业启动,并截断/创建名为file.

还相关:

答案2

第二种形式符合 POSIX 标准,并且可以在任何 POSIX shell 中工作。

第一种形式完全相同,但它只能在支持缩写形式的 shell 中工作(Bash 和 Zsh,仅举两个例子),而在其他形式中会失败(例如,Dash,/bin/shDebian 及其衍生版本中使用的实现)。

如果可移植性很重要,您应该使用两步形式。

相关内容