我使用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?
答案 0 :(得分:1)
Windows上有一个matlab -wait
命令行开关,可以阻止它。
答案 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
。