我正在用CentOS 7系统在我的个人电脑中安装oneapi。安装了oneapi组件后,我希望通过(在终端中)获取setvars.sh文件来设置oneapi的环境。
source /opt/intel/oneapi/setvars.sh intel64终端响应多行输出,就像它应该的那样。
:: initializing oneAPI environment ...
BASH version = 4.2.46(2)-release
:: dev-utilities -- latest
:: tbb -- latest
:: compiler -- latest
:: dpl -- latest
:: mkl -- latest
:: vtune -- latest
:: dpcpp-ct -- latest
:: mpi -- latest
:: clck -- latest
:: inspector -- latest
:: itac -- latest
:: oneAPI environment initialized ::然后我可以找到像ifort这样的编译器的位置。
which ifort然后它给了
/opt/intel/oneapi/compiler/2021.1-beta10/linux/bin/intel64/ifort,这是我的问题,
而不是直接在终端中获取setvars.sh,如果我使用如下sh文件
#!/bin/bash
source /opt/intel/oneapi/setvars.sh intel64并运行sh文件。
bash hello_world.sh然后,输出仍然如出一辙,我相信它可以证明sh文件中的源命令已经成功执行。但是,这一次,环境变量可能不会像which ifort命令那样被设置。
/usr/bin/which: no ifort in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/wuchen/.local/bin:/home/wuchen/bin)我注意到这个帖子Difference between sh and bash,并将sh文件中的命令更改为
. /opt/intel/oneapi/setvars.sh intel64但还是不起作用。我想知道我的问题是否是由于setvars.sh本身。
发布于 2021-07-19 21:44:54
你所描述的每一件事都表明一切都是按照它应有的方式运作的。
第一条评论解释了你所看到的行为。正如评论所述,setvars.sh的采购只会影响当前的shell及其子程序,而不会影响父程序。shell命令位于父命令中,不会看到由子变量设置的变量。
如果您使用的是“源hallo_world.sh”而不是“bash hello_world.sh”,则可以看出两者的区别。
来源..。不会创建新的shell,变量将按您最初的预期进行设置。“狂欢.”设置子shell中的变量,不影响您所在的shell。
https://stackoverflow.com/questions/67553895
复制相似问题