尝试附加到 EOF 时,Bash 出现“权限被拒绝”问题

尝试附加到 EOF 时,Bash 出现“权限被拒绝”问题

当我尝试将几行代码推送到文件末尾时,出现了权限问题。我知道为什么会出现这个错误,但我想不出解决办法。如能得到任何帮助,我将不胜感激。

sudo cat > /etc/php5/apache2/php.ini << EOF
    # extensions
    extension=”memcached.so”
    extension=”apc.so”
EOF

答案1

Heredoc 用法,或“附加到 EOF”,是不是问题。

所有重定向(包括>)都是应用执行实际命令。换句话说,你的 shell 首先尝试打开并/etc/php5/apache2/php.ini进行写入使用您的帐户,则运行完全无用的sudo cat

解决这个问题的一种方法:

sudo bash -c "cat >> /etc/php5/apache2/php.ini" <<EOF

(您可以通过 运行交互式 shell sudo -s,或者使用ddtee写入文件。)


相关说明一下,使用>将要覆写旧的 php.ini。用于>>附加。

答案2

扩展@grawity 的答案,展示如何使用 tee:

sudo tee /etc/php5/apache2/php.ini >/dev/null <<EOF
    # extensions
    extension=”memcached.so”
    extension=”apc.so”
EOF

或者使用 tee 的“-a”选项进行附加而不是覆盖。

答案3

sudo su然后你就有了一个正确的 shell root。在那里运行命令,不带sudo前缀。然后exit从 root shell 返回。

相关内容