为什么 sudo 不能将标准输出重定向到 /etc/file,但 sudo 'nano' 或 'cp' 可以?

Pet*_*r.O 21 permissions sudo io-redirection

为什么重定向,使用sudo给我以下命令的错误?

$ sudo printf "foo" >/etc/file
bash: /etc/file: Permission denied

$ sudo printf "foo" ~/file; cat ~file >/etc/file 
bash: /etc/file: Permission denied
Run Code Online (Sandbox Code Playgroud)

...但是当我使用编辑器时我没有这样的问题,或者cp.
我想我以前从未尝试过这个,所以我不知道我的系统是否有问题,或者这是否正常。正常似乎有点限制,但是(?)也许它是限制性的......(使用Ubuntu)

Ale*_*x B 35

这是正常的。之后的文件>不是由在 下运行的进程打开的sudo,而是由外壳程序打开的,而外壳程序则不是。试试这个:

printf "foo" | sudo tee /etc/file
Run Code Online (Sandbox Code Playgroud)

  • 明白了,谢谢...所以这也有效,`sudo sh -c 'printf "foo" >/etc/file'` (3认同)
  • 此外,正如 Gilles 评论链接的 Q/A 中所述,`tee -a ` 适合附加到文件... (3认同)