【问题标题】:MATLAB unix command truncating stringMATLAB unix 命令截断字符串
【发布时间】: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 程序,-- 之后的所有内容都是输入参数,要么后跟一个值,要么后跟一个值。输入参数值subjnamesourcespacenames{k}datafiletransnamefwdname都是char类的Matlab工作区中的变量。

【问题讨论】:

  • 当你不显示有问题的命令时很难说。您的命令中有未转义的 ' 吗?您的命令必须是有效的 Matlab 字符串,并且任何属于 UNIX 命令的单引号都需要通过'' 进行转义。例如:unix('echo ''hello''');。您还应该能够将命令字符串打印到 Matlab 命令窗口以验证其正确性。
  • subjnamesourcespacenames{k}datafiletransnamefwdname 都是字符串吗?如果你对它们每个运行class,你会得到'char'吗?您的任何字符串是否包含'|'(管道)或';'(分号)或其他标点符号或空格?
  • 所有变量输入都属于char 类,没有管道或标点符号,但有些是在字符串变量中包含/ 的绝对路径。

标签: matlab shell unix


【解决方案1】:

问题的最可能原因是其中一个字符串变量中的不可见字符导致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);

也许这会给你一些关于正在发生的事情的线索。在函数之外创建将用作命令的字符串通常是一个好主意 - 它使这种调试更加简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多