作为我的问题的示例,我的~/.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...'
答案1
环境变量可以简单地以 ENV=VALUE 的形式传递sudo
,并且它们将被后续命令接受。我不知道这种用法是否有限制,所以我的示例问题可以使用以下方法解决:
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"
答案2
您提到的选项-E
似乎工作得很好:
enzotib@host:~$ export DUMMY=dummy
enzotib@host:~$ sudo -E sh -c 'echo $DUMMY'
dummy
enzotib@host:~$ sudo -E env | grep DUMMY
DUMMY=dummy
答案3
您可以使用-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.