&>
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
。