81 votes

Sudo: source: commande introuvable

J'ai mis à jour certains des profils par défaut pour bash et j'ai vu dans les tutoriels que je suivais que je pouvais recharger le nouveau profil avec les nouveaux paramètres d'environnement en utilisant :

source /etc/bash.bashrc

La seule chose est que les nouvelles variables d'environnement n'étaient disponibles que pour mon utilisateur actuel et étaient ignorées lorsque j'utilisais sudo. Elles n'étaient disponibles pour sudo que lorsque j'ai fermé ma session de terminal et que je l'ai rouverte.

Quand j'essaie d'utiliser :

sudo source /etc/bash.bashrc

Je reçois l'erreur :

sudo: source: command not found

Y a-t-il un moyen simple de charger les nouveaux paramètres de profil bash pour sudo sans devoir fermer le terminal et redémarrer ?

-- Initialement, j'utilisais des scripts d'installation qui faisaient référence aux variables. J'ai trouvé que bien qu'ils puissent accéder aux variables lorsque j'appelais les scripts directement (bien que cela posait un problème ultérieur avec la création de répertoires car j'avais besoin d'être root), appeler les scripts d'installation avec sudo ne le ferait pas.

J'ai prouvé cela en testant avec ces commandes simples :

echo $ENV_VARIABLE
sudo echo $ENV_VARIABLE

Le premier afficherait la valeur de la variable, mais le deuxième n'afficherait rien.

106voto

Stig Brautaset Points 1746

Le problème est que source est une commande interne de bash (pas un programme - comme ls ou grep). Je pense qu'une approche consiste à se connecter en tant que root puis à exécuter la commande source.

sudo -s
source /etc/bash.bashrc

17voto

IronWaffleMan Points 645

Le problème n'est pas que source est une commande intégrée au shell. Le fait qu'elle le soit est en réalité ce qui vous renvoie l'erreur command not found, mais cela ne signifie pas que cela fonctionnerait si cela était le cas.

Le véritable problème réside dans le fonctionnement des variables d'environnement. Et voici comment elles fonctionnent : à chaque fois qu'un nouveau processus est lancé, s'il ne se passe rien, il hérite de l'environnement de son parent. En raison de cela, l'utilisation d'un sous-shell (par exemple, en tapant bash à l'intérieur d'une instance bash) et en regardant la sortie de env devrait donner des résultats similaires à son parent.

Cependant, en raison de la manière dont fonctionne sudo (comme indiqué dans sa page man), sudo tente de retrancher l'environnement de l'utilisateur et de créer un environnement "par défaut" pour l'utilisateur supplanté, de sorte que la commande exécutée fonctionne comme si l'utilisateur qui l'a invoquée avait été l'utilisateur appelant (ce qui est le comportement attendu), et donc exécuter nautilus en tant que sudo nautilus devrait ouvrir un dossier dans le dossier /root, et non pas dans /home/votreutilisateur.

Donc :

Effectuer quelque chose comme sudo source script.sh puis sudo command, même si cela fonctionnait, ne serait pas efficace pour définir une variable pour la command sudo suivante.

Pour passer des variables d'environnement, vous pouvez soit dire à sudo de préserver l'environnement (en utilisant l'option -E; et en ayant les autorisations appropriées dans votre fichier sudoers) et/ou en le définissant pour la commande comme sudo VAR1=VALEUR1 VAR2=VALEUR2 commande.

9voto

TomDotTom Points 199

En utilisant le sous-processus bash, vous pouvez faire :

source <(sudo cat /etc/bash.bashrc)

4voto

John Nolan Points 16633

Comme Marcos le dit, votre principal problème ici est que source est une commande intégrée au shell qui n'affecte que le processus shell dans lequel elle est exécutée.

La solution simple est de simplement démarrer un nouveau shell en tant que root, et bash lira automatiquement /etc/bash.bashrc lors de son démarrage. C'est aussi simple que de dire

sudo bash

2voto

psusi Points 35613

Fermer et rouvrir le terminal ne devrait pas changer les choses. Par défaut, sudo supprime l'environnement. Pour désactiver cela, ajoutez -E à sudo.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X