可能重复:
sudo 和重定向输出
假设我想在 /etc/profile 中添加一些行。我尝试:
$ sudo echo "something" >> /etc/profile
bash: /etc/profile: Access forbidden
我当然可以写:
$ sudo su
# echo "something" >> /etc/profile
这是可行的,但是在 shell 脚本中却不行。
那么,什么才是正确的方法呢?
答案1
您的版本:
sudo echo "something" >> /etc/profile
在此命令中,以 root 身份运行,但将 的输出重定向到仅限 root 的文件的echo
shell仍以您的身份运行。这就是您收到“访问被禁止”的原因echo
工作版本:
sudo bash -c 'echo "something" >> /etc/profile'
在此命令中,您使用 sudo 以 root 权限启动一个新 shell,然后使用 bash 的 -c 选项为该 shell 提供整个命令字符串(包括重定向)。
答案2
您可以使用tee
:
$ echo "something" | sudo tee -a /etc/profile
如果省略-a
(附加),文件将被覆盖。