我有下面的bash文件,它启动了一些Matlab m文件(main.m和f.m是脚本(4次(4个任务(。
#$ -S /bin/bash
#$ -l h_vmem=4G
#$ -l tmem=4G
#$ -cwd
#$ -j y
#Run 4 tasks where each task has a different $SGE_TASK_ID ranging from 1 to 4
#$ -t 1-4
#$ -N example
date
hostname
#Output the Task ID
echo "Task ID is $SGE_TASK_ID"
/share/apps/[...]/matlab -nodisplay -nodesktop -nojvm -nosplash -r "main; ID = $SGE_TASK_ID; f; exit"
f.m脚本使用Gurobi工具箱,我被告知为了使文件正确执行,我必须设置环境变量
GRB=/apps/[...].lic
其中[…]包含路径。
我是一个如何编写bash文件的初学者,如果我的问题很愚蠢,我很抱歉:我应该在上面的批处理文件上写哪里/如何/什么来使用Gurobi工具箱?
我在谷歌上搜索过如何设置环境变量,但我对设置、导出和env感到困惑。这个论坛上有很多类似的问题,但由于它们适用于结构明显不同的批处理文件,我不明白它们的答案是否也可以根据我的情况进行定制。
在bash文件中,只需在启动matlab m-files之前添加以下行:
export GRB="/apps/[...].lic"
环境变量由一个进程所有,一个正在运行的进程不能改变另一个正在执行的进程的环境,在创建新进程时,父进程的导出变量默认设置在子进程中,子进程中更改的环境变量不能影响父进程。
GRB=/apps/[...].lic
将在bash
进程中将变量GRB
设置为一个值,例如可以使用echo "$GRB"
看到,但该变量未导出,这意味着在调用matlab
时,对于matlab
进程环境变量GRB
将不会被设置。在调用matlab
之前使用export GRB
会使变量导出到matlab进程。
还有一种语法可以在不影响当前bash进程的情况下为新进程设置环境变量:GRB=/apps/[...].lic /share/apps/[...]/matlab ...
。
有关更多详细信息,请参阅man bash
/export
/^ENVIRONMENT
还比较以下命令的输出,set(内置的,bash"函数",没有创建新进程(,env(/usr/bin/env命令,创建了新进程,只看到导出的变量(
$ set
$ env
第一个显示变量,而第二个环境是第一个的子集。