linux - 多行写入失败(权限被拒绝)

标签 linux bash ubuntu

我想将一个多行字符串写入一个只有 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/

相关文章:

java - 在 Oracle 服务器上配置 IBMJCE 加密库

php - Apache2 内部服务器错误 500

bash - 如何获得没有匹配 .pdf 的 .jpg 文件列表?

wordpress - 反转 chown 命令

ubuntu - 自动完成高级解释

linux - 尝试运行可执行文件 - 文件或目录不存在,但文件存在。我可以执行它,但只能从它所在的目录中执行

php - 使用 XAMPP 在 Linux Mint 中配置 LAMP 环境——安装 Memcache

c - 没有与连接的串行端口通信?

linux - 如何在 Linux 中更改 echo 的输出颜色

Bash:重定向已经运行的进程的输出?