Chr*_*her 2 command-line apt patch redirect
所以 apt-get 有一些输出,我似乎无法重定向到其他任何地方。这是我所看到的示例:
sudo apt-get -qq -y --force-yes install cowsay 2>&1 > /tmp/tmp.txt
Run Code Online (Sandbox Code Playgroud)
这是我在 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.
Run Code Online (Sandbox Code Playgroud)
我如何也收到重定向到我的文件的警告?
您在错误的位置设置了流重定向命令。重定向得到从右到左解析,因此,你需要先写> /tmp/tmp.txt,然后2>&1。在您编写它时,它首先将 STDOUT 重定向到文件,然后将 STDERR 重定向到 STDOUT。
这是正确的命令:
sudo apt-get -qq -y --force-yes remove cowsay > /tmp/tmp.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
但是有一个更简单的选择!您不一定需要将 STDERR 重定向到 STDOUT 才能将两者写入文件,还有一个运算符可以直接将 STDOUT 和 STDERR 重定向到文件:&>
sudo apt-get -qq -y --force-yes remove cowsay &> /tmp/tmp.txt
Run Code Online (Sandbox Code Playgroud)
解释和更多信息:
> filename 将 STDOUT(流 1)重定向到 filename2> filename 将 STDERR(流 2)重定向到 filename&> filename 将 STDOUT 和 STDERR 重定向到 filename同样,如果要将输出通过管道传输到第二个命令:
| 将 STDOUT(流 1)重定向到第二个命令的 STDIN2| filename 将 STDERR(流 2)重定向到第二个命令的 STDIN&| filename 将 STDOUT 和 STDERR 重定向到第二个命令的 STDIN| 归档时间: |
|
| 查看次数: |
3738 次 |
| 最近记录: |