Come esportare la variabile da usare con sudo?


24

Su Slackware, l'utilizzo sbopkgconsente di creare un pacchetto dal sorgente. Repos non è grande come Debian, ma è carino.

Alcuni software possono utilizzare le variabili di ambiente, ad esempio sull'emulatore VICE c64, se la variabile FFMPEGè impostata su yes, abiliterà la ffmpegregistrazione dell'emulatore.

Ho provato ad usare

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

ma ffmpegè disabilitato.

Invece ho dovuto usare

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

che funziona.

Come usare le variabili d'ambiente con sudo?

Risposte:


39

Puoi usare l' -Eopzione di sudo :

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

Dal manuale:

-E, --preserve-env

Indica la politica di sicurezza che l'utente desidera preservare le proprie variabili di ambiente esistenti. La politica di sicurezza può restituire un errore se l'utente non dispone dell'autorizzazione per preservare l'ambiente.

Si noti che ciò esporta tutte le variabili di ambiente esistenti. È più sicuro esportare solo le variabili di ambiente necessarie con la sintassi seguente :

sudo FMPEG=yes sbopkg -B -i vice


Grazie ma non funziona (l'opzione.-E) l'altra riga è ok, quindi perché prima risposta seleziono come corretto.
elbarna,

11

sudodisinfetta le variabili nell'ambiente prima di invocare il comando dato. Dovrai chiedergli di preservare le variabili nell'ambiente affinché il tuo comando funzioni.

Inoltre, dovrai usare exportla FMPEGvariabile prima di usare sudo( export FMPEG=yes; sudo), assegnarla nello stesso modo di invocare sudo( FMPEG=yes sudo) o usare env( env FMPEG=yes sudo).

Per preservare le variabili di ambiente, utilizzare -E(o --preserve-env):

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

È anche possibile impostare variabili di ambiente specifiche come questa:

$ sudo FMPEG=yes sbopkg -B -i vice

Se ciò non riesce a causa della politica di sicurezza in atto, aprire una shell di root e impostare lì la variabile:

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

7

notare che: (export a=b; command)è equivalente a a=b command. Nota le parentesi.

Quindi se applichiamo la variabile non a sudoma diretta a sbopkg, così invece FFMPEG=yes sudo sbopkg -B -i vice che possiamo fare sudo FFMPEG=yes sbopkg -B -i vice

Se una polizia di sicurezza lo impedisce, allora: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(Non usarlo -E, è insicuro in quanto perderà ogni sorta di variabili impreviste.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.