重定向 apt-get 输出

重定向 apt-get 输出

因此,我似乎无法将 apt-get 的一些输出重定向到其他任何地方。以下是我所看到的示例:

sudo apt-get -qq -y --force-yes install cowsay 2>&1 > /tmp/tmp.txt

这是我在 16.04 上运行的示例命令。我在--force-yes此处包括了 以模拟 apt 警告以供将来使用。现在我希望此命令将所有内容重定向到/tmp/tmp.txt;并且大多数代码都在这样做。但是当我运行它时,我得到了以下信息:

$ sudo apt-get -qq -y --force-yes remove cowsay 2>&1 > /tmp/tmp.txt
W: --force-yes is deprecated, use one of the options starting with --allow instead.

我如何获得重定向到我的文件的警告?

答案1

您将流重定向命令放错了位置。重定向从右到左进行解析,因此您需要先写入,> /tmp/tmp.txt然后写入2>&1。正如您所写的那样,它首先将 STDOUT 重定向到文件,然后将 STDERR 重定向到 STDOUT。

这是正确的命令:

sudo apt-get -qq -y --force-yes remove cowsay > /tmp/tmp.txt 2>&1

但是还有一个更简单的选择!您不一定需要将 STDERR 重定向到 STDOUT 才能将两者写入文件,还有一个运算符可以直接将 STDOUT 和 STDERR 重定向到文件:&>

sudo apt-get -qq -y --force-yes remove cowsay &> /tmp/tmp.txt

解释和更多信息:

  • > filename将 STDOUT (流 1)重定向至filename
  • 2> filename将 STDERR(流 2)重定向到filename
  • &> filename重定向 STDOUT 和 STDERR 至filename

类似地,如果您想将输出通过管道传输到第二个命令:

  • |将 STDOUT (流 1)重定向到第二个命令的 STDIN
  • 2| filename将 STDERR(流 2)重定向到第二个命令的 STDIN
  • &| filename将 STDOUT 和 STDERR 重定向到第二个命令的 STDIN

相关内容