¿Cómo exportar variables para usar con sudo?

24

En Slackware, el uso le sbopkgpermite a uno construir un paquete desde la fuente. Repos no es tan grande como Debian, pero es agradable.

Algunos programas pueden usar variables de entorno, por ejemplo, en el emulador VICE c64, si la variable FFMPEGestá configurada en yes, permitirá ffmpeggrabar el emulador.

Traté de usar

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

pero ffmpegestá deshabilitado

En cambio tuve que usar

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

que funciona

¿Cómo utilizar las variables de entorno con sudo?

elbarna
fuente

Respuestas:

39

Puede usar la -Eopción de sudo :

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

Del manual:

-E, --preserve-env

Indica a la política de seguridad que el usuario desea preservar sus variables de entorno existentes. La política de seguridad puede devolver un error si el usuario no tiene permiso para preservar el entorno.

Tenga en cuenta que esto exporta todas sus variables de entorno existentes. Es más seguro exportar solo las variables de entorno que necesita con la siguiente sintaxis :

sudo FMPEG=yes sbopkg -B -i vice

xhienne
fuente
Gracias pero no funciona (la opción.-E) la otra línea está bien, así que porque la primera respuesta selecciono como correcta.
elbarna
11

sudodesinfecta las variables del entorno antes de invocar el comando dado. Tendrá que pedirle que conserve las variables en el entorno para que su comando funcione.

Además, deberá usar exportla FMPEGvariable antes de usar sudo( export FMPEG=yes; sudo), asignarla de la misma manera que invocar sudo( FMPEG=yes sudo) o usar env( env FMPEG=yes sudo).

Para preservar las variables de entorno, use -E(o --preserve-env):

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

También es posible establecer variables de entorno específicas como esta:

$ sudo FMPEG=yes sbopkg -B -i vice

Si esto falla debido a la política de seguridad vigente, abra un shell raíz y configure la variable allí:

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit
Kusalananda
fuente
7

tenga en cuenta que: (export a=b; command)es equivalente a a=b command. Tenga en cuenta los corchetes.

Entonces, si aplicamos la variable no a sudopero directamente a sbopkg, entonces en lugar de FFMPEG=yes sudo sbopkg -B -i vice podemos sudo FFMPEG=yes sbopkg -B -i vice

Si una policía de seguridad evita esto, entonces: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(No lo use -E, es inseguro ya que filtrará todo tipo de variables inesperadas).

ctrl-alt-delor
fuente