2013-03-15 1 views
0

Я использую win7 и matlab2012a. Я хочу написать сценарий оболочки, чтобы протестировать мои скрипты matlab с разными параметрами. Для этой задачи я использую cygwin. Например, альфа - это параметр, а скрипт matlab - getall.m. Скрипт Matlab будет читать параметры из txt-файла 'param.txt'.Как заставить matlab блокировать оболочку в окнах?

#!/bin/sh 
# List=`seq 0.1 0.01 1` 
List=`seq 0.1 0.1 0.2` 
for alpha in $List 
do 
    echo -ne "20\n61\n80\n1\n0.3\n${alpha}" > param.txt 
    matlab -nodesktop -r "getall;quit;" #time consuming 
done 

Моя проблема заключается в том, что сценарий «getall.m» занимает много времени, поэтому я хотел бы, чтобы EXEC это один на один раз. Но я обнаружил, что команда matlab немедленно возвращается. Таким образом, верхний скрипт будет запускать множество экземпляров matlab одновременно. Я также попробовал команду matlab в cmd, но ничего не изменилось. В ubuntu, Matlab блокирует оболочку по умолчанию.

Мой вопрос заключается в том, как заставить команду matlab блокировать оболочку в окнах?

ответ

0

я не знаю «правильный» способ сделать это - но у меня есть хак для вас:

Сделать сценарий MATLAB создать файл с именем «matlabDone» в каталог/TMP непосредственно перед прекращая ; ваш скрипт оболочки может обойти петлю в поисках этого файла. Как только он существует, вы знаете, что Matlab завершен. Удалите файл и повторите цикл. Что-то вроде этого:

List=`seq 0.1 0.1 0.2` 
for alpha in $List 
do 
    echo -ne "20\n61\n80\n1\n0.3\n${alpha}" > param.txt 
    matlab -nodesktop -r "getall;quit;" #time consuming 
    while [ ! -e /tmp/matlabDone ] 
    do 
     sleep 1 
    done 
    rm /tmp/matlabDone 
done 

Затем сделайте последнюю строку вашего MatLab скрипта создать файл /tmp/matlabDone ...

Как я уже сказал - это хак ...

PS Я не 100 % уверены, какие функции доступны в cygwin. Если вы не можете использовать sleep, я увидел интересный пост, предлагающий, что ping -n 2 127.0.0.1 > /dev/null (или эквивалент ... в зависимости от версии ping вам может понадобиться -c 2 -i 1, чтобы получить «одну секунду за ping, count two») может быть альтернативой sleep() ,

+0

Решенный, спасибо! – areslp

Смежные вопросы