【发布时间】:2013-07-26 20:00:42
【问题描述】:
我正在尝试使用 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工作区中的变量。
【问题讨论】:
-
当你不显示有问题的命令时很难说。您的命令中有未转义的
'吗?您的命令必须是有效的 Matlab 字符串,并且任何属于 UNIX 命令的单引号都需要通过''进行转义。例如:unix('echo ''hello''');。您还应该能够将命令字符串打印到 Matlab 命令窗口以验证其正确性。 -
subjname、sourcespacenames{k}、datafile、transname和fwdname都是字符串吗?如果你对它们每个运行class,你会得到'char'吗?您的任何字符串是否包含'|'(管道)或';'(分号)或其他标点符号或空格? -
所有变量输入都属于
char类,没有管道或标点符号,但有些是在字符串变量中包含/的绝对路径。