Как пример моего вопроса, мой ~/.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» (но не root)?
В настоящее время, если я бегу:
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...'
-E
Вариант вы упоминаете , кажется, работает просто отлично:источник
sudo python -c "import numpy"
сLD_LIBRARY_PATH
иLD_PRELOAD
определено как написано выше?SECURITY NOTES
оsudo
странице руководства.man sudo
это не дает ясности, и когда пользователь пытается следовать ссылкам, указанным там, очень легко быть обескураженным всеми ветвями, которые необходимо соблюдать, чтобы иметь возможность расшифровать предполагаемый смысл.Вы можете использовать
-E
параметр sudo для сохранения текущей среды (если у вас есть для этого права)источник
Вы должны редактировать свои
sudoers
отsudo visudo
как , возможно , вы плагин политики безопасности включена , который будет иметь приоритет передPATH
поsecure_path
выбору. Так что добавьте путь к списку, и вы также можете использоватьenv_keep
вместо этого, например:Чтобы проверить,
PATH
не переопределены ли вы , выполните следующую команду:Смотрите также: Почему переменные PATH отличаются при запуске через sudo и su? в Unix SE
источник
env_keep
не работает с PATH (в том смысле, которыйsudo
все еще используетсяsecure_path
при поиске команды)Это работает для меня (
~/.bashrc
):Источник: согласно ОП редактировать
источник
sudo
менее безопасным