因此,我似乎无法将 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)重定向到第二个命令的 STDIN2| filename
将 STDERR(流 2)重定向到第二个命令的 STDIN&| filename
将 STDOUT 和 STDERR 重定向到第二个命令的 STDIN