如何让matlab阻止windows中的shell?

时间:2013-03-15 17:36:40

标签: matlab cygwin

我使用win7和matlab2012a。我想编写一个shell脚本来测试我的matlab脚本使用不同的参数。我使用cygwin完成这项任务。例如,alpha是参数,matlab脚本是getall.m。 matlab脚本将从txt文件'param.txt'中读取参数。

#!/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”很耗时,所以我想一次执行一次。但我发现matlab命令立即返回。所以上面的脚本会同时启动很多matlab实例。我也在cmd中尝试了matlab命令,但没有任何改变。在ubuntu中,matlab默认阻止shell。

我的问题是如何使用matlab命令来阻止windows中的shell?

2 个答案:

答案 0 :(得分:1)

Windows上有一个matlab -wait命令行开关,可以阻止它。

http://www.mathworks.com/help/matlab/ref/matlabwindows.html

答案 1 :(得分:0)

我不知道这样做的“正确”方法 - 但我确实有一个黑客攻击你:

在退出之前,让matlab脚本在/ tmp目录中创建一个名为“matlabDone”的文件;你的shell脚本可以绕过一个寻找这个文件的循环。一旦它存在,你就知道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}的ping版本才能获得“ ping,count two“)可以替代-c 2 -i 1