Переменные среды, когда выполнено с '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) мог найти библиотеки, которые он должен выполнить, поскольку это - сборка с компиляторами Intel и MKL. Этот рабочий процесс не является лучшим, но это - другая история.

Мой вопрос состоит в том, как я могу передать произвольные переменные (как те, в которых ~/.bashrc) когда я запускаю программу с 'sudo' (но не корень)?

В настоящее время, если я работаю:

sudo python -c "import numpy"

Я получаю ошибку:

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

Некоторые предложения как sudo -i или sudo -E ничего не изменяет здесь.


Править:

Я не могу ответить на свой вопрос (недостаточно точек :D), но я прокомментирую здесь в надежде, что существуют другие новички Linux, задающиеся вопросом о sudo прерывания.

[Только временно!] Это работает на меня (~/.bashrc):

alias sudo='sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'
49
задан 30 April 2015 в 01:50

5 ответов

Переменные среды могут быть просто переданы после sudo в форме ENV=VALUE и thay'll быть принятым сопровождаемой командой. Не известно мне, если существуют ограничения на это использование, таким образом, моя проблема в качестве примера может быть решена с:

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
ответ дан 22 November 2019 в 23:53

-E опция, которую Вы упоминаете, кажется, работает просто великолепно:

enzotib@host:~$ export DUMMY=dummy
enzotib@host:~$ sudo -E sh -c 'echo $DUMMY'
dummy
enzotib@host:~$ sudo -E env | grep DUMMY
DUMMY=dummy
22
ответ дан 22 November 2019 в 23:53

Можно использовать -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
ответ дан 22 November 2019 в 23:53

Необходимо отредактировать Ваш sudoers sudo visudo поскольку возможно Вам включили плагин политики безопасности, который переопределяет Ваш PATH 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? в Unix SE

8
ответ дан 22 November 2019 в 23:53

Это работает на меня (~/.bashrc):

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

Источник: Согласно редактированию OP

0
ответ дан 22 November 2019 в 23:53

Другие вопросы по тегам:

Похожие вопросы: