所以有一些来自 apt-get 的输出,我似乎无法重定向到其他任何地方。这是我看到的示例:
sudo apt-get -qq -y --force-yes install cowsay 2>&1 > /tmp/tmp.txt
这是我在 16.04 上运行的示例命令。我在--force-yes
这里包括模拟一个恰当的警告以供将来使用。现在我希望这个命令将所有内容重定向到/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.
我如何也收到重定向到我的文件的警告?
您将流重定向命令放在错误的位置。重定向是从右到左解析的,因此您需要先编写.
> /tmp/tmp.txt
,然后再编写2>&1
. 正如您编写的那样,它首先将 STDOUT 重定向到文件,然后将 STDERR 重定向到 STDOUT。这是正确的命令:
但是有一个更简单的选择!您不一定需要将 STDERR 重定向到 STDOUT 以将两者都写入文件,还有一个运算符可以将 STDOUT 和 STDERR 直接重定向到文件:
&>
解释和更多信息:
> filename
将 STDOUT(流 1)重定向到filename
2> filename
将 STDERR(流 2)重定向到filename
&> filename
将 STDOUT 和 STDERR 重定向到filename
同样,如果要将输出通过管道传输到第二个命令:
|
将 STDOUT(流 1)重定向到第二个命令的 STDIN2| filename
将 STDERR(流 2)重定向到第二个命令的 STDIN&| filename
将 STDOUT 和 STDERR 重定向到第二个命令的 STDIN