0

私はwin7とmatlab2012aを使用しています。さまざまなパラメーターを使用して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」に時間がかかることです。そのため、一度に1つずつ実行したいと思います。しかし、matlabコマンドがすぐに返されることがわかりました。したがって、上のスクリプトは同時に多くのmatlabインスタンスを開始します。cmdでmatlabコマンドも試しましたが、何も変わりません。ubuntuでは、matlabはデフォルトでシェルをブロックします。

私の質問は、Windowsでシェルをブロックするmatlabコマンドを作成する方法ですか?

4

2 に答える 2

1

Windowsには、ブロックするmatlab -waitコマンドラインスイッチがあります。

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

于 2013-03-17T21:49:06.443 に答える
0

これを行うための「正しい」方法はわかりませんが、ハックはあります。

matlabスクリプトで、終了する直前に/tmpディレクトリに「matlabDone」というファイルを作成します。シェルスクリプトは、このファイルを探すループを回ることができます。存在すると、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 cygwinで使用できる機能が100%わかりません。を使用できない場合は、(または同等の... pingのバージョンによっては「pingごとに1秒、2カウント」を取得する必要があるかもしれない)がの代わりになる可能性があるsleepことを示唆する興味深い投稿を見ました。ping -n 2 127.0.0.1 > /dev/null-c 2 -i 1sleep()

于 2013-03-15T21:25:13.917 に答える