我正在尝试使用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程序,--
后面的所有内容都是一个输入参数,后面跟着一个值。输入参数值subjname
,sourcespacenames{k}
,datafile
,transname
和fwdname
都是类char
的Matlab工作空间中的所有变量
答案 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);
也许这会给你一些关于发生了什么的线索。创建字符串通常是一个好主意,您将在函数之外使用它作为命令使用它 - 这使得这种调试更加直接。