& 与 > bash 结合使用有什么作用?

& 与 > bash 结合使用有什么作用?

&>bash 中and中的 & 的用途是什么&>>

答案1

它们都与 I/O 重定向有关正如这里解释的那样

在 的情况下&>,这会将标准输出 (stdout) 和标准错误输出 (stderr) 重定向到文件。例如,让我们将 date 的输出重定向到这样的文件:

date &> foo.txt

这将创建(或覆盖)一个foo.txt以 的输出命名的文件date。该文件的内容将如下所示:

Sun Oct  4 22:37:58 EDT 2015

但在这种情况下&>>,会将标准输出 (stdout) 和标准错误输出 (stderr) 重定向到文件。但表示>>如果指定的文件已经存在,则应将其附加到该文件,而不是覆盖该文件。

因此,如果我连续运行此命令几次:

date &> foo.txt

由于单个字符表示每次运行该命令时文件内容都会被覆盖,因此所有foo.txt输出都是上次运行该命令时的输出。>

>>但如果我连续几次运行这个命令:

date &>> foo.txt

foo.txt文件将附加date如下输出:

Sun Oct  4 22:37:58 EDT 2015
Sun Oct  4 22:38:06 EDT 2015
Sun Oct  4 22:38:13 EDT 2015
Sun Oct  4 22:38:15 EDT 2015
Sun Oct  4 22:38:16 EDT 2015

请注意,这&>>在 Bash 3.x 中似乎不起作用,但在 Bash 4.x 中可以按预期工作。

答案2

考虑一个名为的命令cmd

cmd &>filename

上述命令将命令的标准输出和标准错误发送到filename,覆盖该文件中先前的所有内容。它相当于:

cmd >filename 2>&1

形式&>>非常相似:

cmd &>>filename

附加cmd 的 stdout 和 stderr 替换为 file 中已有的内容filename。这相当于:

cmd >>filename 2>&1

您可以在 中阅读更多相关信息man bash

相关内容