使用CentOS 7.x,用户“加载”软件执行程序的正确方式是通过命令行运行:
module load program/1.1
通过 bash 脚本运行此命令的正确方法是什么(例如,将作业提交到计算集群等)?一个人可以做
source module load program/1.1
还有哪些其他选择?
答案1
shell 脚本只是要运行的命令列表,几乎就像您在命令行中键入它们一样。所以正确的做法是:
module load program/1.1
...就像您在命令行中运行一样。请注意,如果这给出了未找到的命令,您可能需要获取源$MODULESHOME/init/<shell>
(设置module
命令)。
该module
命令实际上是一个 shell 函数,这就是它能够操纵当前 shell 环境的方式。
source
做了一些不同的事情:它本质上是将源脚本复制并粘贴到您的脚本中。因此,如果源脚本定义了函数,您就可以调用它们。如果它设置了变量,即使是未导出的变量,您也可以看到它们。
现在,如果您想编写一个加载一堆模块以在交互式 shell 中使用的脚本,那么从您的交互式 shell你需要来源你的脚本, 但不是module
。这模块常见问题解答解释了这一点。
答案2
我遇到了类似的问题,最终意识到我需要正确的 shebang 和 call 函数。因此,对于未来的用户,分三步:
1)用作#!/bin/bash
你的shebang
2)添加module load program/1.1
到你的脚本中
./yourscript.sh
3)使用or运行脚本,bash yourscript.sh
但 NOTsh yourscript.sh
因为这不起作用