私の質問の例として、~/.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...'
環境変数は、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"
あなたが言及した-E
オプションはうまく働くようです:
enzotib@Host:~$ export DUMMY=dummy
enzotib@Host:~$ Sudo -E sh -c 'echo $DUMMY'
dummy
enzotib@Host:~$ Sudo -E env | grep DUMMY
DUMMY=dummy
-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.
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
これは私のために働きます(~/.bashrc
):
alias Sudo='Sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'
出典: OP編集