我运行了这个代码:
sudo cat <<EOF | sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
echo "Hello World"
EOF
但尽管如此,我还是收到“权限被拒绝”的提示,因为您必须以 root 身份才能在 /etc/init.d 目录中进行更改。不知何故,上面的命令不起作用。
有办法解决这个问题吗?
答案1
重定向到文件由 bash 处理。因此它不会继承 sudo 授予的权限。
用于sudo tee
以 root 身份写入文件。
尝试这个:
cat | sed -e 's,%,$,g' | sudo tee /etc/init.d/dropbox << EOF
echo "Hello World"
EOF
请注意,$,
双引号里面的内容可能会被解释。
答案2
你可以授予自己持久的 su-rights
# sudo -s
然后你的命令(不再需要 sudo )并退出
# exit
编辑:
我假设你问的是与 Ubuntu 相关的问题,因为你的问题被标记为 Ubuntu。在其他发行版(如 Suse)中,你可以
# su
使用# sudo -s
答案3
这部分:sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
cen被视为:
sudo somecommand --put the result of the sudo command into--> /etc/init.d/dropbox
与此方法相同:
ls somedirectory > filename
ls somedirectory --put the result of the ls command into--> filename
这意味着文件写入将以您当前的用户身份完成,而不是以 root 身份完成。
您可以使用tee
Benoit 在他的答案中所展示的方法来解决此问题。