如何在ssh命令行中使用环境模块?

6
环境模块包用于动态修改用户环境(Debian软件包environment-modules)。
我想直接从ssh命令行使用module。 目的是能够从在前端节点上执行的bash脚本中在不同节点上执行命令。 我不想为每个不同的节点配置显式更新PATHLD_LIBRARY_PATH环境变量。
当我直接连接到节点然后从节点调用module时,它显然是工作的:
jyvet> ssh mynode
jyvet@mynode> module load gcc-6.0
jyvet@mynode> gcc --version
gcc (GCC) 6.0.1

但是以下方法会失败:
jyvet> ssh mynode "module load gcc-6.0; gcc --version"
command not found: module
gcc-4.8 (Debian 4.8.4-1) 4.8.4
2个回答

7

module 模块是由 /etc/profile.d/modules.sh 初始化的,该脚本被 /etc/profile 调用(在 shell 启动时设置环境变量)。

ssh 命令执行的 shell 是 非交互式 shell,不会调用 /etc/profile,也不会读取配置文件。

这里是解决方法:

jyvet> ssh mynode "source /etc/profile; module load gcc-6.0; gcc --version"
gcc (GCC) 6.0.1

5

您还可以调用一个bash的登录实例,以便在登录时自动进行/etc/profile.d/modules.shsource操作:

ssh mynode "bash -lc 'module load gcc-6.0; gcc --version'"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接