web-dev-qa-db-ja.com

「Sudo」で実行した場合の環境変数

私の質問の例として、~/.bashrcファイルには次の行が含まれています。

export LD_LIBRARY_PATH=/opt/intel/mkl/lib/ia32:$LD_LIBRARY_PATH
export LD_PRELOAD=/opt/intel/mkl/lib/ia32/libmkl_core.so

numpy(Python)は、MKLおよびIntelコンパイラーでビルドされているため、実行する必要のあるライブラリーを見つけることができます。このワークフローは最適ではありませんが、それは別の話です。

私の質問はルートではなく)でプログラムを実行するときに、(~/.bashrcのような任意の変数を渡すにはどうすればよいですか?

現在、私が実行した場合:

Sudo python -c "import numpy"

エラーが発生します:

ImportError: libimf.so: cannot open shared object file: No such file or directory*

Sudo -iまたはSudo -Eなどのいくつかの提案は、ここでは何も変更しません。


編集:

私は質問に答えることができませんが(十分なポイントはありません:D)、Sudoトラップについて疑問に思う他のLinux初心者がいることを期待して、ここでコメントします。

[一時的にのみ!]これは私のために働く(~/.bashrc):

alias Sudo='Sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'
48
zetah

環境変数は、Sudoの後にENV = VALUEの形式で渡すだけで、後続のコマンドで受け入れられます。この使用法に制限があるかどうかはわかりませんので、私の問題例は次の方法で解決できます。

Sudo LD_LIBRARY_PATH=/opt/intel/mkl/lib/ia32:$LD_LIBRARY_PATH LD_PRELOAD=/opt/intel/mkl/lib/ia32/libmkl_core.so python -c "import numpy"
57
zetah

あなたが言及した-Eオプションはうまく働くようです:

enzotib@Host:~$ export DUMMY=dummy
enzotib@Host:~$ Sudo -E sh -c 'echo $DUMMY'
dummy
enzotib@Host:~$ Sudo -E env | grep DUMMY
DUMMY=dummy
21
enzotib

-E Sudoオプションを使用して、現在の環境を保持できます(それを行う権限がある場合)

$ man Sudo
 -E, --preserve-env
             Indicates to the security policy that the user wishes to preserve
             their existing environment variables.  The security policy may
             return an error if the user does not have permission to preserve
             the environment.
14
Eugen Konkov

sudoers by Sudo visudoオプションをオーバーライドするセキュリティポリシープラグインが有効になっている可能性があるため、PATH by secure_pathを編集する必要があります。リストにパスを追加すると、代わりにenv_keepを使用することもできます。例:

Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"

PATHがオーバーライドされているかどうかを確認するには、次のコマンドを実行します。

$ Sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

参照: Sudoおよびsuを介して実行する場合、PATH変数が異なるのはなぜですか? Unix SE

8
kenorb

これは私のために働きます(~/.bashrc):

alias Sudo='Sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'

出典: OP編集

0
kenorb