【问题标题】:How can I "cache" the effects of Intel OneAPI setvars?如何“缓存”英特尔 OneAPI setvars 的效果?
【发布时间】:2022-01-14 02:46:28
【问题描述】:

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

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

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

?

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


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

【问题讨论】:

  • 它通常如何在父shell的环境中设置vars?您是否必须 source 它而不是运行它并 evaling 输出?如果是前者,可能你可以在之前/之后捕获setenv 的结果并进行比较以查看它设置的环境变量,并将其调整为简单的东西。 set 的输出包括 shell 函数,而不仅仅是环境变量,至少在 bash 中是这样。
  • @PeterCordes:你必须找到它。如果他们能生成一个你可以eval 的脚本会更好更健壮,但他们不会那样做...... :-(

标签: shell environment-variables intel icc intel-oneapi


【解决方案1】:

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

  1. 在您的.bashrc.bash_profile 以及您在登录时运行的任何内容中禁用采购setvars.sh
  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,但请记住在您的系统配置/目录结构更改以及更新版本时重新生成它。

【讨论】:

    猜你喜欢
    • 2022-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2020-06-01
    • 2012-09-28
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多