Comment garder les variables d'environnement lors de l'utilisation de sudo
Lorsque je utiliser n'importe quelle commande avec sudo les variables d'environnement ne sont pas là. Par exemple après la mise HTTP_PROXY la commande wget
fonctionne très bien sans sudo
. Cependant, si je tape sudo wget
il dit qu'il ne peut pas ignorer le paramètre de proxy.
Vous devez vous connecter pour publier un commentaire.
Vous devez d'abord
export HTTP_PROXY
. Deuxièmement, vous avez besoin de lireman sudo
soigneusement, et de prêter attention à la-E
drapeau. Cela fonctionne:Voici la citation de la page de man:
LC_*
variable. Il suffit donc de neexport LOL_FOO=$LC_FOO
et l'utilisationLOL_FOO
à la place.PATH
dans le.bashrc
fichier -- dire,export PATH=myPath:$PATH
. Si j'typesudo -E bash -c 'echo $PATH'
, puisPATH
ne contient pas de myPath probablement parce quesudo
a déjà désactivé la valeur locale dePATH
avant d'appelerbash
. Plutôt, j'ai trouvé la réponse en dessous de stackoverflow.com/a/33183620/5459638 efficace, c'est-àsudo PATH=$PATH command
package
est sous myPath, puissudo PATH=$PATH which package
trouve la bonne réponse à la différence desudo which package
. Cependant,sudo PATH=$PATH package
ne pas aller plus loin quesudo package
(fichier non trouvé). D'autre part, le lancement d'une plainepackage
à partir d'un shell est invoqué avecsudo bash
préserve le chemin étendu et donnepackage
sudo droits (les deux pigeons avec une pierre). Donc, la réponse dépend vraiment de commandes qui vous sont lancement-E, --preserve-env ... . The security policy may return an error if the user does not have permission to preserve the environment.
HTTP_PROXY=val sudo -E bash -c 'echo $HTTP_PROXY'
.L'astuce consiste à ajouter des variables d'environnement pour
sudoers
fichier viasudo visudo
de commande et ajouter ces lignes:prises de Wiki ArchLinux.
Pour Ubuntu 14, vous devez spécifier dans des lignes distinctes car il renvoie les erreurs pour les multi-variable de lignes:
sudo -E
est le moyen infaillible pour adhoc obtenir le même effet pour un one-off, sietc/sudoers
directement. Au lieu de cela, utilisez lavisudo
commande, la syntaxe des vérifications de vos modifications avant de les écraser à lasudoers
fichier. De cette façon, vous ne vous limitez pas si vous faites une erreur lors de l'édition.~/.bash_profile
exporté vars, même après l'utilisation desudo visudo
pour les ajouter avecDefaults env_keep += "VARNAME"
Defaults env_reset
, haaa! Heureux, j'ai pensé que l'une de sortir!Pour les variables individuelles que vous souhaitez rendre disponibles sur une base que vous pouvez faire partie de la commande.
package
sous certaines myPath ajouté àPATH
dans le.bashrc
fichier (avecexport
clausule). Puissudo PATH=$PATH which package
trouve la bonne réponse, à la différence desudo which package
. Cependant,sudo PATH=$PATH package
ne pas aller plus loin quesudo package
(fichier non trouvé). D'autre part, le lancement d'une plainepackage
à partir d'un shell est invoqué avecsudo bash
préserve le chemin étendu et donnepackage
sudo droits (les deux pigeons avec une pierre). Donc, la réponse dépend vraiment de commandes qui vous sont lancementVous pouvez aussi combiner les deux
env_keep
états Ahmed Aswani la réponse en un seul énoncé comme ceci:Defaults env_keep += "http_proxy https_proxy"
Vous devriez également envisager de préciser
env_keep
pour une seule commande comme ceci:Defaults!/bin/[your_command] env_keep += "http_proxy https_proxy"
Si vous avez besoin de garder les variables d'environnement dans un script, vous pouvez mettre votre commande dans un ici document de ce genre. Surtout si vous avez beaucoup de variables à définir les choses semblent bien rangé de cette façon.