我想将一个多行字符串写入一个只有 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
当执行此命令时,我得到的只是“权限被拒绝”。手动创建文件是可行的。
最佳答案
输出重定向是在 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
虽然使用的分隔符并不重要,但使用指示文件 结尾的东西比行 结尾更有意义:) tee
实际上将其输入写入命名文件和标准输出,但您不需要查看您正在编写的内容,因此重定向到 /dev/null
。
关于linux - 多行写入失败(权限被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141098/