2 votes

Quelle est la différence entre sudo bash et la commande sudo dans le fichier bash ?

Je voudrais ajouter certaines commandes au fichier ${HOME}/.bashrc.

J'ai fait un script pour le faire.

# file name : setup_bash
bashrc_path="${HOME}/.bashrc"
comment="test"
sudo echo "${comment}" >> "${bashrc_path}"

et l'exécuter par

bash setup_bash

Et il en résulte une erreur.

setup_bash: line 19: /home/user/.bashrc: Permission denied

La ligne 19 est à (sudo echo ...).

J'ai ensuite essayé le code suivant,

sudo bash setup_bash

Il en résulte un succès.

Quelle est la différence entre eux ? S'il vous plaît, apprenez-moi.

4voto

larsks Points 23184

La redirection des entrées/sorties du shell se produit avant une commande s'exécute. C'est-à-dire que lorsque vous exécutez...

sudo echo "some text" >> /some/path

...la coquille s'ouvre /some/path avant même d'exécuter le echo commande. L'implication de ceci est que la redirection d'entrée/sortie est pas va être affecté par le sudo (parce que la redirection se fait avant sudo même les courses ). D'autre part, lorsque vous exécutez...

sudo bash setup_bash

...vous exécutez le tout le script en tant qu'utilisateur Root, ce qui signifie que lorsque le moment est venu d'effectuer la redirection i/o, le script est déjà exécuté en tant que root et donc la redirection va réussir.

1voto

heemayl Points 8100

Le problème est qu'en

sudo echo "${comment}" >> "${bashrc_path}"

l'opération de redirection du shell (STDOUT) (écriture -- ajout) >> "${bashrc_path}" est d'abord effectuée par le shell, en tant qu'utilisateur invoquant l'utilisateur, avant même que la commande principale ne soit exécutée. Et on peut supposer que l'utilisateur qui invoque n'a pas la permission d'ouvrir le fichier pour l'écrire, d'où le message d'erreur "permission denied" du shell ; ceci indépendamment de la commande sudo echo ... parce que l'exécution de cette commande n'a pas encore commencé, même à ce moment-là.

Maintenant, quand vous avez utilisé sudo au moment de l'invocation, vous vous faites passer pour root (par défaut) pour que la redirection -- l'opération d'écriture (append) réussisse, (et comme vous l'avez peut-être deviné, vous n'avez même pas besoin de l'option sudo devant echo maintenant).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X