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