0

Matlab R2013a でコマンドを使用unix()してシェル コマンドを実行しようとしています。特定のコマンドは、一連の文字列および/または文字列変数を使用してまとめられますunix(['name_of_program --arguments ' string_variables...])。この特定の文字列は比較的長いですが、ターミナルに入力すると実行されるほど長くはありません。ただし、unixMatlab でコマンドを使用すると、文字列が特定できない制限で切り捨てられ、2 つのコマンド、つまり実行したいコマンド全体を構成するサブ文字列が発行されます。Matlab スクリプトをシェル スクリプトに変換する以外に、別の回避策が見つかりません。その前に、コマンド全体をMatlabで発行する方法についての提案をいただければ幸いです。unixコマンドを発行する前に、コマンド文字列の作成も試みたことに注意してください。command = strcat (A,B,C)または両方とも同じ結果で終了しますcommand = [A B C]unix(command)コマンド全体は次のとおりです。

unix(['mne_do_forward_solution --subject ' subjname ...
      ' --src ' sourcespacenames{k} ...
      ' --meas ' datafile ...
      ' --mri ' transname ...
      ' --megonly -all --fwd ' fwdname ...
      ' --overwrite --mindistout rej'])

ここmne_do_forward_solutionで、 は C プログラムであり、それに続くもの--はすべて、値が続くかどうかにかかわらず、入力引数です。入力引数値 、subjnamesourcespacenames{k}datafiletransnameおよびfwdnameは、クラス の Matlab ワークスペース内のすべての変数ですchar

4

1 に答える 1

2

問題の原因として最も可能性が高いのは、文字列変数の 1 つに非表示の文字が含まれているため、unixコマンドがそれを 2 つの別個の文字列として処理することです。もしかして迷子\r\0どこか?これがあなたがすることです:

myCommand = ['mne_do_forward_solution --subject ' subjname ...
             ' --src ' sourcespacenames{k} ...
             ' --meas ' datafile ...
             ' --mri ' transname ...
             ' --megonly -all --fwd ' fwdname ...
             ' --overwrite --mindistout rej'];

disp(myCommand); % inspect the command string: does it look good?

fprintf(1, '%.0f ', double(myCommand)); % print the ASCII values

unix(myCommand);

おそらく、これは何が起こっているかについてのいくつかの手がかりを与えるでしょう. 通常、コマンドとして使用する文字列は、それを使用する関数の外で作成することをお勧めします。これにより、この種のデバッグがより簡単になります。

于 2013-07-27T04:00:05.723 に答える