对于 ubuntu 12.04 bash 脚本,我曾经能够运行如下示例的命令来覆盖文件:
sudo echo 'line1
line2
line3' > /etc/some/config/file.conf
Run Code Online (Sandbox Code Playgroud)
从 Ubuntu 14.04 开始,我现在必须将其分解以获得与这样的相同行为:
sudo echo 'line1
line2
line3' | sudo tee /etc/some/config/file.conf
Run Code Online (Sandbox Code Playgroud)
我猜这是一个额外的安全措施?有没有办法回到旧的行为?
更新
正如一些人正确指出的那样,这种行为在 Ubuntu 12.04 和 Ubuntu 14.04 中是一致的。我相信我很困惑,但是因为如果在用 sudo 调用的 bash 脚本中运行命令,那么它执行得很好,但是,将命令粘贴到 CLI 中,会导致权限被拒绝。我在比较苹果和橙子。
不能直接使用 >与sudo你正在做的方式,原因是重定向被shell通过sudo的执行,而不是,因此命令将无法写入该文件,因为权限。
有关此问题的适当解决方案,请参阅此问题:
更新:
如果您复制:
sudo echo 'line1
line2
line3' > /etc/some/config/file.conf
Run Code Online (Sandbox Code Playgroud)
到一个文件,说scrip.sh,然后执行脚本
sudo bash script.sh
Run Code Online (Sandbox Code Playgroud)
您不会收到错误并且脚本将成功执行,因为在这种情况下,您通过为 shell 提供适当的权限 ( sudo bash)来运行脚本。