如何使用带有管道的 sudo?

如何使用带有管道的 sudo?

可能重复:
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 的文件的echoshell仍以您的身份运行。这就是您收到“访问被禁止”的原因echo

工作版本:

sudo bash -c 'echo "something" >> /etc/profile'

在此命令中,您使用 sudo 以 root 权限启动一个新 shell,然后使用 bash 的 -c 选项为该 shell 提供整个命令字符串(包括重定向)。

答案2

您可以使用tee

$ echo "something" | sudo tee -a /etc/profile

如果省略-a(附加),文件将被覆盖。

相关内容