Wie exportiere ich eine Variable zur Verwendung mit sudo?

24

Wenn Sie unter Slackware verwenden, sbopkgkönnen Sie ein Paket aus dem Quellcode erstellen. Repos ist nicht so groß wie Debian, aber es ist nett.

Einige Softwareprogramme können Umgebungsvariablen verwenden, z. B. im VICE c64-Emulator. Wenn die Variable auf festgelegt FFMPEGist yes, wird die ffmpegAufzeichnung des Emulators aktiviert .

Ich habe versucht zu verwenden

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

ist aber ffmpegdeaktiviert.

Stattdessen musste ich verwenden

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

welches funktioniert.

Wie verwende ich Umgebungsvariablen mit sudo?

Elbarna
quelle

Antworten:

39

Sie können die -EOption von sudo verwenden :

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

Aus dem Handbuch:

-E, --preserve-env

Weist auf die Sicherheitsrichtlinie hin, dass der Benutzer seine vorhandenen Umgebungsvariablen beibehalten möchte. Die Sicherheitsrichtlinie gibt möglicherweise einen Fehler zurück, wenn der Benutzer keine Berechtigung zum Schützen der Umgebung hat.

Beachten Sie, dass dadurch alle vorhandenen Umgebungsvariablen exportiert werden. Es ist sicherer, nur die Umgebungsvariablen zu exportieren, die Sie mit der folgenden Syntax benötigen :

sudo FMPEG=yes sbopkg -B -i vice

xhienne
quelle
Danke, aber es funktioniert nicht (die Option.-E). Die andere Zeile ist in Ordnung, da ich die erste Antwort als korrekt auswähle.
Elbarna
11

sudoBereinigt die Variablen in der Umgebung, bevor der angegebene Befehl aufgerufen wird. Sie müssen ihn bitten, die Variablen in der Umgebung beizubehalten, damit Ihr Befehl ausgeführt werden kann.

Darüber hinaus müssen Sie exportdie FMPEGVariable vor der Verwendung von sudo( export FMPEG=yes; sudo) zuweisen, wie beim Aufrufen von sudo( FMPEG=yes sudo) oder mit env( env FMPEG=yes sudo).

Verwenden Sie -E(oder --preserve-env), um die Umgebungsvariablen beizubehalten :

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

Es ist auch möglich, bestimmte Umgebungsvariablen wie folgt festzulegen:

$ sudo FMPEG=yes sbopkg -B -i vice

Wenn dies aufgrund der vorhandenen Sicherheitsrichtlinie fehlschlägt, rufen Sie eine Root-Shell auf und legen Sie die Variable dort fest:

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

Beachten Sie, dass: (export a=b; command)gleichbedeutend mit a=b command. Beachten Sie die Klammern.

Wenn wir dann die Variable nicht auf, sudosondern direkt auf anwenden sbopkg, FFMPEG=yes sudo sbopkg -B -i vice können wir dies tun , anstattsudo FFMPEG=yes sbopkg -B -i vice

Wenn eine Sicherheitspolizei dies verhindert, dann: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(Verwenden Sie es nicht -E, es ist unsicher, da es alle möglichen unerwarteten Variablen verliert.)

Strg-Alt-Delor
quelle