0

我正在尝试使用unix()Matlab R2013a 中的命令来执行 shell 命令。使用一系列字符串和/或字符串变量将特定命令放在一起,例如unix(['name_of_program --arguments ' string_variables...]); 并且这个特定的字符串相对较长,但不会太长以至于在终端中输入时会运行。但是,当unix在 Matlab 中使用该命令时,字符串在某个限制处被截断,我无法弄清楚,并且发出了两个命令,即构成我希望运行的整个命令的子字符串。除了将我的 Matlab 脚本转换为 shell 脚本之外,我想不出另一种解决方法。因此,在此之前,我将不胜感激有关如何在 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 程序,后面的所有内容--都是一个输入参数,要么后跟一个值,要么不跟一个值。输入参数值 , subjname, sourcespacenames{k}, datafile,transnamefwdname, 都是类的 Matlab 工作区中的变量char

4

1 回答 1

2

问题的最可能原因是其中一个字符串变量中的不可见字符导致unix命令将其视为两个单独的字符串。也许有一个流浪者\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 回答