MATLAB unix命令截断字符串

时间:2013-07-26 20:00:43

标签: matlab shell unix

我正在尝试使用Matlab R2013a中的unix()命令来执行shell命令。使用一系列字符串和/或字符串变量将特定命令放在一起,例如unix(['name_of_program --arguments ' string_variables...]);并且这个特定的字符串相对较长,但没有那么长,以至于它在终端输入时运行。但是,当在Matlab中使用unix命令时,字符串在某个限制时被截断,我无法弄清楚,并且发出了两个命令,即构成我希望运行的整个命令的子字符串。除了将我的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程序,--后面的所有内容都是一个输入参数,后面跟着一个值。输入参数值subjnamesourcespacenames{k}datafiletransnamefwdname都是类char的Matlab工作空间中的所有变量

1 个答案:

答案 0 :(得分: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);

也许这会给你一些关于发生了什么的线索。创建字符串通常是一个好主意,您将在函数之外使用它作为命令使用它 - 这使得这种调试更加直接。