web-dev-qa-db-fra.com

Comment exporter une variable pour l'utiliser avec sudo?

Sur Slackware, l'utilisation de sbopkg permet de construire un package à partir des sources. Repos n'est pas aussi gros que Debian, mais c'est sympa.

Certains logiciels peuvent utiliser des variables d'environnement, par exemple sur l'émulateur VICE c64, si la variable FFMPEG est définie sur yes, elle permettra ffmpeg d'enregistrer l'émulateur.

J'ai essayé d'utiliser

$ export FFMPEG=yes; Sudo sbopkg -B -i vice

mais ffmpeg est désactivé.

Au lieu de cela, j'ai dû utiliser

$ su -
$ export FFMPEG=yes
$ sbopkg -B -i vice

qui fonctionne.

Comment utiliser les variables d'environnement avec Sudo?

27
elbarna

Vous pouvez utiliser l'option -E De Sudo:

FMPEG=yes Sudo -E sbopkg -B -i vice

Du manuel:

-E, --preserve-env

Indique à la politique de sécurité que l'utilisateur souhaite conserver ses variables d'environnement existantes. La politique de sécurité peut renvoyer une erreur si l'utilisateur n'est pas autorisé à préserver l'environnement.

Notez que cela exporte tous vos variables d'environnement existantes. Il est plus sûr d'exporter uniquement les variables d'environnement dont vous avez besoin avec la syntaxe suivante:

Sudo FMPEG=yes sbopkg -B -i vice

41
xhienne

Sudo désinfecte les variables de l'environnement avant d'appeler la commande donnée. Vous devrez lui demander de conserver les variables dans l'environnement pour que votre commande fonctionne.

De plus, vous devrez export la variable FMPEG avant d'utiliser Sudo (export FMPEG=yes; Sudo), affectez-le en même temps que l'appel de Sudo (FMPEG=yes Sudo), ou utilisez env (env FMPEG=yes Sudo).

Pour conserver les variables d'environnement, utilisez -E (ou --preserve-env):

$ env FMPEG=yes Sudo -E sbopkg -B -i vice

Il est également possible de définir des variables d'environnement spécifiques comme ceci:

$ Sudo FMPEG=yes sbopkg -B -i vice

Si cela échoue en raison de la politique de sécurité en place, affichez un shell racine et définissez-y la variable:

$ Sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit
11
Kusalananda

notez que: (export a=b; command) est équivalent à a=b command. Notez les crochets.

Ensuite, si nous appliquons la variable non pas à Sudo mais directement à sbopkg, donc au lieu de FFMPEG=yes Sudo sbopkg -B -i vice nous pouvons faire Sudo FFMPEG=yes sbopkg -B -i vice

Si une police de sécurité l'empêche, alors: Sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(N'utilisez pas -E, cela nous rend peu sûr car cela entraînera la fuite de toutes sortes de variables inattendues.)

8
ctrl-alt-delor