0

我使用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?

4

2 回答 2

1

There's a matlab -wait command line switch on Windows that will make it block.

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

于 2013-03-17T21:49:06.443 回答
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 的版本,您可能需要-c 2 -i 1获得“每次 ping 一秒钟,计数两个”)可以替代sleep().

于 2013-03-15T21:25:13.917 回答