linux bash脚本中的module load命令

时间:2017-07-20 20:24:01

标签: python linux bash environment-modules

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

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

#module load /home/hw1u16/modules/2.7.3

module load /home/hw1u16/modules/1.6.2

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

module load /home/hw1u16/modules/2.7.3
module load /home/hw1u16/modules/1.6.2
python /home/hw1u16/project/trainAgent.py

警告我

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' 我不知道什么是错的,任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

好的,我想我知道问题出在哪里。从shell中试用type module,了解系统中当前如何module。您将收到两个选项:它是别名还是函数。这是因为module命令是aliasshell function

假设您的脚本是以下running.sh

#!/bin/bash  
module load python/2.7.3
python /home/hw1u16/project/trainAgent.py

(添加shebang是一个好习惯)

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

  • 选项1:

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

  • 选项2:

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

答案 1 :(得分:1)

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

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

  2. 如果您不想使用. yourscript.sh,则可以按照DavidC的答案中的说明,将{@ {1}}的shebang修改为#!/bin/sh,并以{{1 }}请注意,以#!/bin/bash的身份运行将无法正常工作