0

英特尔的 OneAPI 发行版(包括许多组件,例如 ICC)有一个名为 的脚本setvars.sh,它检查各种东西的存在,然后运行组件的各个脚本来设置环境变量。运行并将一些内容打印到终端需要一秒钟多的时间。

现在,我愿意运行一次,但我当然不想在每次启动 shell 时都运行它。我怎样才能以它在调用之前从我的环境中添加(或删除?)的增量形式“缓存”它的结果?这样我就可以使用以下脚本获取脚本:

export PATH="whatever:$PATH"
export TBBROOT="whatever"
# etc. etc.

?

当然,如果我的系统配置发生任何变化,我需要重新运行 setvars.sh,但我可以接受。


PS - 不得不说:OneAPI 是错误命名的缩影。它是除我们之外的任何人都不会使用的,众多 API 之一。

4

1 回答 1

1

下面是如何做到这一点(假设 bash,这将适用于其他 shell 比照适用):

  1. 禁用您的采购setvars.sh.bashrc以及.bash_profile您在登录时运行的任何内容。
  2. 登录并进入 bash 会话后,执行env > /tmp/env_before.txt
  3. setvars.sh脚本。
  4. 执行env > /tmp/env_after.txt
  5. 执行diff /tmp/env_before.txt /tmp/env_after.txt /tmp/precache.diff

现在,在 diff 中添加的所有行都是以前未设置的新环境变量。您可以将它们缓存为

export FOO="bar"

行(如果缺少括号,请确保添加括号,以防万一)。

更改的行是对现有环境变量的更改。这些将很少,甚至可能只是$PATH。对于那些,您的缓存需要以下行:

export PATH="/bunch/of:/intel/stuff:$PATH"

它将英特尔 OneAPI 条目添加到现有条目之前。您将需要检查您之前拥有的任何条目是否实际上已被删除,但我怀疑这会发生。无论如何,手动执行这些行;其他行可能可以使用正则表达式一次全部转换。

结果是一个包含几十个export命令的 shell 脚本。源,而不是setvars.sh,但请记住在您的系统配置/目录结构更改以及更新版本时重新生成它。

于 2021-12-09T10:19:57.100 回答