作为我的问题的例子,我的~/.bashrc文件包含以下几行:
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/ia32:$LD_LIBRARY_PATH
export LD_PRELOAD=/opt/intel/mkl/lib/ia32/libmkl_core.so
Run Code Online (Sandbox Code Playgroud)
这样 Numpy (Python) 就可以找到它需要运行的库,因为它是使用 MKL 和英特尔编译器构建的。这个工作流程不是最好的,但这是另一回事。
我的问题是,~/.bashrc当我使用“sudo”(但不是 root)运行程序时,如何传递任意变量(如 中的变量)?
目前,如果我运行:
sudo python -c "import numpy"
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
ImportError: libimf.so: cannot open shared object file: No such file or directory*
Run Code Online (Sandbox Code Playgroud)
一些建议作为sudo -i或sudo -E不会改变这里的任何内容。
编辑:
我无法回答我的问题(分数不够:D)但我会在这里发表评论,希望还有其他 Linux 新手对sudo陷阱感到疑惑。
[只是暂时的!] 这对我有用(~/.bashrc):
alias sudo='sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'
Run Code Online (Sandbox Code Playgroud) 如何为服务器上的所有用户设置 PATH 变量中的说明?努力为所有“普通”用户设置 PATH。但是,如果我这样做sudo -s,则printenv PATH不会显示更新的路径。我已经查看了例如Setting TeX Live path for root,但这对我来说似乎没有意义,也许因为我来自 Windows 背景。有没有办法设置真正的系统范围的路径,以便系统上运行的每个进程绝对继承条目?
您可以编辑sudoers文件并设置secure_path以匹配您的路径。这在Unix & Linux 中有记录。
是否有我可以传递的命令行开关sudo,以便它使用我设置的路径?例如:
rick@alien:~$ sudo echo $PATH
/home/rick/bin:/home/rick/.local/bin:/mnt/e/bin:/mnt/e/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
???????????????????????????????????????????????????????????????????????????????
rick@alien:~$ echo $PATH
/home/rick/bin:/home/rick/.local/bin:/mnt/e/bin:/mnt/e/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
???????????????????????????????????????????????????????????????????????????????
rick@alien:~$ sudo which auto-brightness-config
/usr/local/bin/auto-brightness-config
???????????????????????????????????????????????????????????????????????????????
rick@alien:~$ which auto-brightness-config
/mnt/e/usr/local/bin/auto-brightness-config
???????????????????????????????????????????????????????????????????????????????
rick@alien:~$ sudo locate auto-brightness-config
/Desktop/Link to auto-brightness-config
/home/rick/Pictures/display-auto-brightness-config 1.png
/mnt/e/Desktop/Link to auto-brightness-config
/mnt/e/usr/local/bin/.auto-brightness-config
/mnt/e/usr/local/bin/Link to auto-brightness-config
/mnt/e/usr/local/bin/auto-brightness-config
/usr/local/bin/.auto-brightness-config
/usr/local/bin/Link to auto-brightness-config
/usr/local/bin/auto-brightness-config
Run Code Online (Sandbox Code Playgroud)
当我使用sudo它运行/usr/local/bin时,当我真正想要/mnt/e/usr/local/bin.
如果我不想维护sudoers文件中的路径,是否可以传递一个开关sudo以使用我的路径来查找正确的命令?