Como exportar variável para uso com o sudo?

24

No Slackware, o uso sbopkgpermite criar um pacote a partir da fonte. Repos não é grande como o Debian, mas é bom.

Alguns softwares podem usar variáveis ​​de ambiente, por exemplo no emulador VICE c64, se a variável FFMPEGestiver definida como yes, permitirá a ffmpeggravação do emulador.

Eu tentei usar

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

mas ffmpegestá desativado.

Em vez disso, tive que usar

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

que funciona

Como usar variáveis ​​de ambiente sudo?

elbarna
fonte

Respostas:

39

Você pode usar a -Eopção do sudo :

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

Do manual:

-E, --preserve-env

Indica à política de segurança que o usuário deseja preservar suas variáveis ​​de ambiente existentes. A política de segurança pode retornar um erro se o usuário não tiver permissão para preservar o ambiente.

Observe que isso exporta todas as suas variáveis ​​de ambiente existentes. É mais seguro exportar apenas as variáveis ​​de ambiente necessárias com a seguinte sintaxe :

sudo FMPEG=yes sbopkg -B -i vice

xhienne
fonte
Obrigado, mas ele não funciona (a opção.-E) a outra linha está ok, então porque a primeira resposta é selecionada como correta.
precisa saber é
11

sudolimpa as variáveis ​​no ambiente antes de chamar o comando fornecido. Você precisará pedir para preservar as variáveis ​​no ambiente para que seu comando funcione.

Além disso, você precisará exportda FMPEGvariável antes de usar sudo( export FMPEG=yes; sudo), atribuí-la da mesma forma que invocar sudo( FMPEG=yes sudo) ou usar env( env FMPEG=yes sudo).

Para preservar as variáveis ​​de ambiente, use -E(ou --preserve-env):

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

Também é possível definir variáveis ​​de ambiente específicas como esta:

$ sudo FMPEG=yes sbopkg -B -i vice

Se isso falhar devido à política de segurança em vigor, abra um shell raiz e defina a variável lá:

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit
Kusalananda
fonte
6

note que: (export a=b; command)é equivalente a a=b command. Observe os colchetes.

Então, se aplicarmos a variável não a, sudomas direcionar para sbopkg, em vez de FFMPEG=yes sudo sbopkg -B -i vice podermos fazer sudo FFMPEG=yes sbopkg -B -i vice

Se uma polícia de segurança impedir isso, então: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(Não use -E, isso é inseguro, pois vazará todo tipo de variáveis ​​inesperadas.)

ctrl-alt-delor
fonte