最大命令长度未达到,但仍超过



从cygwin中调用(bash)shell脚本的matlab函数时,我有一个奇怪的问题。

这是有问题的命令:

"$MATLAB_PATH/matlab" -wait -nojvm -nosplash -automation -logfile "$MATLAB_LOGFILE" -r "myFunction $(echo ${FUNCTION_ARGS[@]}); quit;"

在BASH命令行上的echoed时,将评估以下内容:

/cygdrive/c/Program Files (x86)/MATLAB/R2010a/bin/matlab -wait -nojvm 
    -nosplash -automation -logfile MATLAB_output.txt -r myFunction 
    /path/to/relevant/data/data1.txt /path/to/other/relevant/data/data2.txt 
    <<several more such arguments>>; quit;

总共命令的长度为〜2000个字符,具体取决于脚本从哪个路径来调用。

问题是我的MATLAB函数仅收到17个参数(〜1017个字符),而我发送了30个参数。

其他观察到的行为:

  • 当我将echoed命令行复制到常规 matlab session(即不是自动化服务器)时,似乎没有问题,并且该功能在所有〜30上都可以正常执行争论。
  • 当我减少命令行的长度(例如,通过删除-wait选项)时,MATLAB函数将突然收到18个参数,最后一个参数是18 th string的一部分我传递了。
  • 将命令行长度减少或增加几个字符,以其他方式(重复路径中的斜线,复制空间等)没有效果。
  • 编辑:复制命令行长似乎具有1014字符的最大长度。

显然,沿刀片链的某个地方,命令可以拥有的最大长度有限制。我在Matlab,其自动化服务器,bash或cygwin的文档中找不到任何相关的东西 - 它们都有限制,但按32K字符的顺序更重要,而不是我传递的内容。

所以...我不知所措。我不确定如何诊断哪种工具引起了这一点...任何想法?

编辑:xargs --show-limits的输出:

Your environment variables take up 5556 bytes 
POSIX upper limit on argument length (this system): 24396 
POSIX smallest allowable upper limit on argument length (all systems): 4096 
Maximum length of command we could actually use: 18840 
Size of command buffer we are actually using: 24396

expr $(getconf ARG_MAX) - $(env|wc -c) - $(env|wc -l) * 4 - 2048的输出:

24098

所以,正如我所说,即使其中最小的一个也不接近我的〜2000字符。

MATLAB处理命令行的处理可能存在限制。例如,分配给该功能的缓冲区的长度可能限制为1014个字符。

在脚本中,将函数调用保存在脚本中,然后尝试将脚本传递给命令行上的matlab。

http://www.mathworks.com/help/matlab/ref/matlabwindows.html说:

matlab -r"语句"启动MATLAB并执行指定的MATLAB语句。如果语句是MATLAB函数或脚本的名称,请不要指定文件扩展名。任何必需的文件都必须在MATLAB搜索路径或启动文件夹中。

相关内容

  • 没有找到相关文章

最新更新