在调用Matlab脚本的bash文件中设置环境变量

时间:2018-11-09 10:09:36

标签: bash matlab environment-variables

我有以下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工具箱?

我已经搜索了如何设置环境变量,但是在设置,导出和环境之间却感到困惑。这个论坛上有很多类似的问题,但是,由于它们适用于结构显然不同的批处理文件,因此我无法理解他们的答案是否也可以针对我的情况进行定制。

2 个答案:

答案 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

第一个显示变量,而第二个环境是第一个环境的子集。