Question Bash "Autorisation refusée" problème lors de la tentative d'ajout à EOF


En essayant de pousser quelques lignes à la fin d'un fichier, j'obtiens un problème d'autorisation. Je comprends pourquoi je reçois l'erreur, mais je ne peux pas penser à un moyen de le résoudre. Toute aide serait appréciée.

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

4
2017-09-26 17:57


origine


ls -al /etc/php5/apache2/php.ini, quels sont les paramètres d'autorisation du fichier? - Jin


Réponses:


Heredoc usage, ou "ajout à EOF", est ne pas le problème.

Toutes les redirections (y compris >) sont appliqué avant exécuter la commande actuelle. En d'autres termes, votre shell essaie d'abord d'ouvrir /etc/php5/apache2/php.ini pour écrire en utilisant votre compte, puis court complètement inutile sudo cat.

Une façon de contourner cela:

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

(Vous pouvez exécuter un shell interactif via sudo -s, Ou utiliser dd ou tee pour écrire dans le fichier.)


Sur une note connexe, en utilisant > volonté écraser l'ancien php.ini. Utilisation >> à ajouter.


10
2017-09-26 18:13



Merci grawity. J'ai des problèmes en cours d'exécution pour les fichiers cachés. Je reçois ce genre de réponse: cl.ly/3K2J3Q2N1h2I3N364301 - onassar
@onassar: Si vous ouvrez le heredoc avec "EOF", vous devez le fermer avec exactement la même chose"EOF". ne pas avec ".EOF"comme vous le faites actuellement. - grawity
c'est le code que je colle dans: Cl.ly/1w3s1p2J3U1I3C1j0q1O il est en fait juste rendu incorrectement par mon terminal. - onassar
il semble que les onglets de mon code (caractère \ t) jetaient les choses. remplacer ceux avec 4 espaces a fait l'affaire. THX! - onassar


sudo su et puis vous avez une coquille appropriée comme root. Exécutez la commande là-bas, sans sudo préfixe. Ensuite, exit pour revenir du shell racine.


0
2017-09-26 18:00





Pour développer la réponse en @grawity, en montrant comment utiliser tee:

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

ou utilisez l'option "-a" du tee pour l'ajouter au lieu de la remplacer.


0
2018-02-13 12:29