Lorsque j'utilise une commande avec Sudo, les variables d'environnement ne sont pas présentes. Par exemple, après avoir défini HTTP_PROXY, la commande wget
fonctionne correctement sans Sudo
. Cependant, si je tape Sudo wget
, il indique qu'il ne peut pas contourner le paramètre de proxy.
L'astuce consiste à ajouter des variables d'environnement au fichier sudoers
via la commande Sudo visudo
et d'ajouter les lignes suivantes:
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"
tiré de ArchLinux wiki .
Pour Ubuntu 14, vous devez spécifier dans des lignes séparées car il renvoie les erreurs pour les lignes multi-variables:
Defaults env_keep += "http_proxy"
Defaults env_keep += "https_proxy"
Defaults env_keep += "HTTP_PROXY"
Defaults env_keep += "HTTPS_PROXY"
Vous devez d’abord export HTTP_PROXY
. Deuxièmement, vous devez lire attentivement man Sudo
et faire attention au drapeau -E
. Cela marche:
$ export HTTP_PROXY=foof
$ Sudo -E bash -c 'echo $HTTP_PROXY'
Voici la citation de la page de manuel:
-E, --preserve-env
Indicates to the security policy that the user wishes to preserve their
existing environment variables. The security policy may return an error
if the user does not have permission to preserve the environment.
Pour les variables individuelles que vous souhaitez rendre disponibles au cas par cas, vous pouvez les intégrer à la commande.
Sudo http_proxy=$http_proxy wget "http://stackoverflow.com"
Vous pouvez également combiner les deux déclarations env_keep
de la réponse de Ahmed Aswani en une seule déclaration comme celle-ci:
Defaults env_keep += "http_proxy https_proxy"
Vous devriez également envisager de spécifier env_keep
pour une seule commande comme celle-ci:
Defaults!/bin/[your_command] env_keep += "http_proxy https_proxy"
Si vous avez besoin de conserver les variables d'environnement dans un script, vous pouvez placer votre commande dans un document here comme celui-ci. Surtout si vous avez beaucoup de variables pour régler les choses de cette manière.
# prepare a script e.g. for running maven
runmaven=/tmp/runmaven$$
# create the script with a here document
cat << EOF > $runmaven
#!/bin/bash
# run the maven clean with environment variables set
export ANT_HOME=/usr/share/ant
export MAKEFLAGS=-j4
mvn clean install
EOF
# make the script executable
chmod +x $runmaven
# run it
Sudo $runmaven
# remove it or comment out to keep
rm $runmaven