我有以下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工具箱?
我已经搜索了如何设置环境变量,但是在设置,导出和环境之间却感到困惑。这个论坛上有很多类似的问题,但是,由于它们适用于结构显然不同的批处理文件,因此我无法理解他们的答案是否也可以针对我的情况进行定制。
答案 0 :(得分:2)
在bash文件中,只需在启动前添加以下行:
export GRB="/apps/[...].lic"
答案 1 :(得分:2)
环境变量归一个进程所有,一个正在运行的进程不能更改另一个正在运行的进程的环境,在创建新进程时,默认情况下在子进程中设置了父进程的导出变量,而在子进程中更改的环境变量可以会影响父进程。
GRB=/apps/[...].lic
将在GRB
进程中将变量bash
设置为一个值,例如,可以使用echo "$GRB"
看到该变量,但是不会导出该变量,这意味着在调用{ {1}},对于matlab
,将不会设置过程环境变量matlab
。在调用GRB
之前使用export GRB
会将变量导出到matlab进程。
还有一种语法可以在不影响当前bash进程的情况下为新进程设置环境变量:matlab
。
有关更多详细信息,GRB=/apps/[...].lic /share/apps/[...]/matlab ...
man bash
/export
还要比较以下命令的输出,设置(内置,bash“函数”,不创建新进程),env(/ usr / bin / env命令,创建新进程,仅看到导出的变量)>
/^ENVIRONMENT
第一个显示变量,而第二个环境是第一个环境的子集。