Comment exporter une variable pour l'utiliser avec sudo?

24

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

Certains logiciels peuvent utiliser des variables d'environnement, par exemple sur l'émulateur VICE c64, si la variable FFMPEGest définie sur yes, cela permettra d' ffmpegenregistrer l'émulateur.

J'ai essayé d'utiliser

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

mais ffmpegest 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?

elbarna
la source

Réponses:

39

Vous pouvez utiliser l' -Eoption 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 toutes 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

xhienne
la source
Merci mais cela ne fonctionne pas (l'option.-E). L'autre ligne est ok donc parce que la première réponse, je la sélectionne comme correcte.
elbarna
11

sudodé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 avoir exportla FMPEGvariable avant d'utiliser sudo( export FMPEG=yes; sudo), l'assigner en même temps que invoquer sudo( FMPEG=yes sudo) ou utiliser 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
Kusalananda
la source
7

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

Ensuite, si nous appliquons la variable non pas à sudomais 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"

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

ctrl-alt-delor
la source