запуск сценария bash на сервере для выполнения нескольких сценариев MATLAB

1110 Я не программист, просто химик. Я пишу сценарий bash, который я хочу запустить на сервере и ожидать, что он будет делать следующее:

  1. Открыть терминал
  2. Цикл по папкам slave_1, slave_2, ..., slave_N для каждой папки откройте вкладку, запустите MATLAB (maltab -nodesktop), перейдите в папку cd и запустите скрипт slave_process.

Вот что у меня есть:

#!/bin/bash

for i in {1..5}
do
gnome-terminal --tab  --working-directory="/usr/local/MATLAB/MATLAB_Production_Server/R2015a/bin" --command='./matlab -nodesktop; cd /mnt/projects/slave_$i; -nosplash -r slave_process'
done

exit 0

Может ли кто-нибудь помочь мне заставить скрипт работать? Я не в файле sudoers, поэтому не могу ничего изменить на сервере.

Обновление. Ответ @muru делает свое дело, но он запускает новый терминал при каждой итерации цикла, что является проблемой, так как мне нужно запустить около 200 экземпляров MATLAB. Я хочу, чтобы в одном терминале было несколько вкладок (или вообще нет терминала). Вот мой модифицированный код, который не работает:

args=()
for i in {1..5}; do
    cmd=working-directory='/mnt/projects/slave_$i' --command='/usr/local/MATLAB/MATLAB_Production_Server/R2015a/bin/matlab -nodesktop -nosplash -r slave_process'
    args+=(--tab-with-profile=Default -e "sh -c \"$cmd; bash\"")
done

gnome-terminal "${args[@]}"

Может кто-нибудь помочь здесь?

0
задан 23 November 2015 в 13:37

1 ответ

Примечания:

  • Переменное расширение не работает в одинарных кавычках '' - таким образом slave_$i во второй части Вашей команды останется slave_$i.
  • , Так как Вы знаете путь эти matlab команда, выполните его непосредственно использование полного пути, вместо того, чтобы запуститься в том каталоге и использовать ./matlab.
  • , Если -nosplash -r slave_process аргументы matlab, они должны быть в той же команде.
  • exit 0 является ненужным.

Рассматривают что-то как:

#!/bin/bash

for i in {1..5}
do
    gnome-terminal --tab  --working-directory="/mnt/projects/slave_$i" \
      --command='/usr/local/MATLAB/MATLAB_Production_Server/R2015a/bin/matlab -nodesktop -nosplash -r slave_process'
done
0
ответ дан 23 November 2015 в 23:37

Другие вопросы по тегам:

Похожие вопросы: