我想将多行字符串写入只能以root权限访问的文件。
这是我到目前为止所做的:
sudo cat > /etc/init/myservice.conf <<EOL
start on runlevel [2345]
stop on runlevel [06]
respawn
script
cd ~/somefolder
. venv/bin/activate
exec python manage.py runserver 0.0.0.0:8080
end script
EOL
当这个命令时,我得到的是&#34; Permission Denied&#34;。手动创建文件。
答案 0 :(得分:6)
在 sudo
运行之前,处理输出重定向,因此您仍在尝试以自己的身份打开文件,而不是以root身份打开文件。一种选择是使用tee
而不是cat
,因为tee
而不是当前的shell会打开文件进行编写。
sudo tee /etc/init/myservice.conf > /dev/null <<EOF
start on runlevel [2345]
stop on runlevel [06]
respawn
script
cd ~/somefolder
. venv/bin/activate
exec python manage.py runserver 0.0.0.0:8080
end script
EOF
虽然使用的分隔符并不重要,但使用表示 file 结尾的内容更有意义,而不是 line :) {{ {1}}实际上将其输入写入命名文件和标准输出,但您不需要查看正在编写的内容,因此重定向到tee
。