Linux bash 脚本中的模块加载命令

skw*_*ang 6 python linux bash environment-modules

我需要在 HPC 集群中执行 Python 脚本。不幸的是,默认的python版本只有2.6.6,并且没有numpy和scipy。

我可以在命令行中加载这些模块

#module load /home/hw1u16/modules/2.7.3
Run Code Online (Sandbox Code Playgroud)

module load /home/hw1u16/modules/1.6.2
Run Code Online (Sandbox Code Playgroud)

但是,当我像这样编写 bash 脚本时

module load /home/hw1u16/modules/2.7.3
module load /home/hw1u16/modules/1.6.2
python /home/hw1u16/project/trainAgent.py
Run Code Online (Sandbox Code Playgroud)

它警告我

ModuleCmd_Load.c(200):ERROR:105: Unable to locate a modulefile for '/home/hw1u16/modules' ModuleCmd_Load.c(200):ERROR:105: Unable to locate a modulefile for '/home/hw1u16/modules' 我不知道出了什么问题,有人可以帮助我吗?

Chr*_*itz 9

我遇到了类似的问题,找到了两种解决方案:

  1. 您可以运行它,而不是使用sh yourscript.sh或运行脚本。这将正确获取模块并运行脚本./yourscript.sh. yourscript.sh

  2. 如果您不想使用. yourscript.sh,您可以按照 DavidC 的答案中所述将 shebang 从 修改为#!/bin/sh#!/bin/bash并将脚本运行为 注意./yourscript.sh,运行它sh yourscript.sh不会工作


Dav*_*dC. 4

好吧,我想我知道问题出在哪里了。尝试type module从 shell 中查看module它当前在您的系统中是如何定义的。您将收到两个选项:别名或函数。这是因为该module命令是aliasor shell function

假设您的脚本如下running.sh

#!/bin/bash  
module load python/2.7.3
python /home/hw1u16/project/trainAgent.py
Run Code Online (Sandbox Code Playgroud)

(添加 shebang 是一个很好的做法)

要解决这个问题,您有两种选择:

  • 选项1:

source脚本。换句话说,做:source running.shmodule这与直接在交互式 shell 中键入命令完全相同。但是,通过执行./running.sh,您将运行一个新的非交互式 shell。这些通常没有设置标准别名和 shell 函数。

  • 选项2:

从脚本中找到定义module命令的初始化脚本source