我运行了这段代码:
sudo cat <<EOF | sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
echo "Hello World"
EOF
但即使如此,我得到“权限被拒绝”,因为你必须是root用户才能在/etc/init.d目录中进行更改。不知何故,我上面的命令不起作用。
有办法解决这个问题吗?
我运行了这段代码:
sudo cat <<EOF | sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
echo "Hello World"
EOF
但即使如此,我得到“权限被拒绝”,因为你必须是root用户才能在/etc/init.d目录中进行更改。不知何故,我上面的命令不起作用。
有办法解决这个问题吗?
Answers:
重定向到文件由bash处理。因此它不会继承sudo授予的权限。
使用sudo tee
写入文件,作为根。
尝试这个:
cat | sed -e 's,%,$,g' | sudo tee /etc/init.d/dropbox << EOF
echo "Hello World"
EOF
请注意,$,
可能会解释内部双引号。
你可以给予自己持久的权利
# sudo -s
然后你的命令(不再需要sudo)并退出
# exit
编辑:
我假设你问Ubuntu相关,因为你的问题被标记了。在像Suse这样的其他发行版中,您将有能力使用
# su
而不是# sudo -s
su
。
# sudo ./myScript
这部分:sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
被视为:
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节目来解决它。