web-dev-qa-db-ja.com

変数をsudoで使用するためにエクスポートする方法は?

Slackwareでは、sbopkgを使用すると、ソースからパッケージをビルドできます。 ReposはDebianほど大きくはありませんが、いいですね。

一部のソフトウェアは、VICE c64エミュレーターなどの環境変数を使用できます。変数FFMPEGyesに設定されている場合、エミュレーターの記録ffmpegが有効になります。

使ってみた

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

ただし、ffmpegは無効です。

代わりに私は使用しなければなりませんでした

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

動作します。

Sudoで環境変数を使用する方法

27
elbarna

Sudoの-Eオプションを使用できます。

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

マニュアルから:

-E、-preserve-env

ユーザーが既存の環境変数を保持したいことをセキュリティポリシーに示します。ユーザーが環境を保存する権限を持っていない場合、セキュリティポリシーはエラーを返すことがあります。

これによりallが既存の環境変数をエクスポートすることに注意してください。 次の構文で必要な環境変数のみをエクスポートする方が安全です

Sudo FMPEG=yes sbopkg -B -i vice

41
xhienne

Sudoは、指定されたコマンドを呼び出す前に、環境内の変数を無害化します。コマンドを機能させるには、環境内の変数を保存するように要求する必要があります。

さらに、exportexport FMPEG=yes; Sudo)を使用する前にFMPEG変数をSudo変数に割り当てるか、SudoFMPEG=yes Sudo)を呼び出すのと同じように割り当てるか、envenv FMPEG=yes Sudo)を使用する必要があります。

環境変数を保持するには、-E(または--preserve-env)を使用します。

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

次のように特定の環境変数を設定することもできます。

$ Sudo FMPEG=yes sbopkg -B -i vice

適切なセキュリティポリシーが原因でこれが失敗する場合は、ルートシェルを起動し、そこに変数を設定します。

$ Sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit
11
Kusalananda

注意:(export a=b; command)a=b commandと同等です。括弧に注意してください。

次に、変数をSudoではなくsbopkgに適用すると、FFMPEG=yes Sudo sbopkg -B -i viceの代わりにSudo FFMPEG=yes sbopkg -B -i viceを実行できます

セキュリティポリスがこれを防止する場合:Sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

-Eは使用しないでください。あらゆる種類の予期しない変数がリークされるため、安全ではありません。)

8
ctrl-alt-delor