Bash重定向:由于`&> foo`意味着`> foo 2>&1`,那么是否有`&>>`?

4
以下代码将把标准输出和标准错误重定向到logfile中:
$ command &> logfile

我该如何在下次运行 command 时不覆盖 logfile 进行重定向?类似于普通重定向的 >>
4个回答

4

来自BASH手册

The format for appending standard output and standard error is:
       &>>word
This is semantically equivalent to
       >>word 2>&1

那么,$ command &>> logfile

编辑:简短的版本似乎是bash 4版本中的一个特性,因此出于兼容性考虑,您应该使用command >> logfile 2>&1


这对你有用吗?标准的OSX bash(3.2.48)会产生语法错误:syntax error near unexpected token '>' - mu is too short
是的和不是的。我最初在Cygwin bash(4.1.10(4))上尝试过它,可以工作。现在你说它不行,我也检查了其他两个版本,Ubuntu带有bash 4.1.5(1),可以工作,而Solaris带有bash 3.2.51(1),不能工作。所以我猜这是一个版本4的功能? - carlpett
是的,看起来像是版本4的事情。不过2>&1版本应该在任何地方都可以工作。 - mu is too short
至少在bash上它不会工作$ ls test1 &>> test -bash:`>'附近有意外的标记语法错误 - jay
@jay,你用的是哪个版本?(bash --version - carlpett

4

您可以将stderr(2)附加到stdout(1),然后以追加模式重定向stdout:

command >> logfile 2>&1
2>&1 位将标准错误输出附加到标准输出,然后您可以像通常一样将标准输出重定向以追加到logfile

@yi_H: 现在好了吗?我通常在管道中使用2>&1 - mu is too short

0
根据文档,你想要的就是你猜测的内容:
$ command &>> logfile

注意使用双重的>>来进行追加。


0

你在问题中回答了自己的问题...

$ command &>> logfile

但看起来 &>> 是 bash-4 的东西,我猜 jay 正在使用的是仍然附带 bash-3 的 OSX。 - mu is too short

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接