Установите переменные окружения в bash-файле, вызывая скрипт Matlab - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть следующий bash-файл, запускающий некоторые m-файлы Matlab (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. На этом форуме есть много похожих вопросов, но, поскольку они относятся к пакетным файлам, очевидно, с различной структурой, я не мог понять, можно ли адаптировать их ответы и к моему случаю.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Переменные среды принадлежат процессу, запущенный процесс не может изменить среду другого запущенного процесса, когда при создании нового процесса экспортированные переменные parent устанавливаются в дочерний процесс по умолчанию, переменные среды, измененные в дочернем процессе, могут ' не влияет на родительский процесс.

GRB=/apps/[...].lic установит для переменной GRB значение в процессе bash, которое можно увидеть, например, с помощью echo "$GRB", но эта переменная не экспортируется, что означает, что при вызове matlab для matlab процесса Переменная окружения GRB не будет установлена. Использование export GRB перед вызовом matlab приведет к экспорту переменной в процесс matlab.

Существует также синтаксис для установки переменной среды для нового процесса без влияния на текущий процесс bash: GRB=/apps/[...].lic /share/apps/[...]/matlab ....

Для получения более подробной информации man bash /export /^ENVIRONMENT

Также сравните вывод следующих команд: set (встроенная функция bash, «функция», новый процесс не создан), env (/ usr / bin / env команда, новый процесс создан и видит только экспортированные переменные)

$ set
$ env

первая показывает переменные, тогда как вторая среда является подмножеством первой.

0 голосов
/ 09 ноября 2018

В вашем bash-файле просто добавьте следующую строку перед запуском m-файлов matlab:

export GRB="/apps/[...].lic"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...