我正在尝试写一个Octave脚本,我可以作为一个可执行文件运行。
我使用的是八度版本3.6.0。我正在运行从这里下载的以下脚本
#!/usr/local/bin/octave -qf
# An example Octave script
len = input( "What size array do you wish to use for the evaluation: " );
clear a;
tic();
for i=1:len
a(i) = i;
endfor
time1 = toc();
a = [1];
tic();
for i=2:len
a = [a i];
endfor
time2 = toc();
a=zeros( len, 1 );
tic();
for i=1:len
a(i) = i;
endfor
time3 = toc();
printf( "The time taken for method 1 was %.4f seconds\n", time1 );
printf( "The time taken for method 2 was %.4f seconds\n", time2 );
printf( "The time taken for method 3 was %.4f seconds\n", time3 );但是,当我在命令行上运行脚本时,会得到以下错误:
‘'usr/local/bin/octave:无效选项-’
但是,当我在命令行输入相同的命令时:
/usr/local/bin/octave -qf
我得到八度命令提示符。我做错了什么?
发布于 2012-03-11 23:12:54
我想您所处的是某种Unix/Linux系统。文件是否采用DOS格式,带有DOS样式的行尾?这可能会导致解释命令的方式出现问题。
发布于 2012-03-13 02:54:02
您的shebang行(顺便说一句,它有一个不应该使用的空格)正在调用/usr/local/bin/octave,但是错误来自/usr/bin/octave。这是个错误吗?如果是这样的话,您需要复制并粘贴代码和类似的错误。如果不是,local版本可能是一个脚本,在非交互运行时调用带有不正确选项的二进制文件。特别是,它看起来像是脚本(或某些东西,至少)试图使用一个长选项(--option),而二进制文件不支持它(所以它将它解释为一个短选项)。
发布于 2012-03-17 08:52:43
首先,发布的脚本在我的系统上运行良好。
我输入nano test.sh,将其复制到文件中,我将第一行更改为#!/usr/bin/octave -qf。
我按Ctrl和Ctrl。
然后,我使用chmod +x test.sh使脚本可执行。
然后,我使用./test.sh或octave -qf test.sh运行脚本,它按预期工作。
注:我系统上的八度音阶是
$ which octave
/usr/bin/octave
$ file /usr/bin/octave
/usr/bin/octave: symbolic link to `octave-3.6.1'
$file /usr/bin/octave-3.6.1
/usr/bin/octave-3.6.1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x061b0a703928fc22af5ca93ee78346a7f5a0e481, stripped在我的系统中,/usr/bin和/usr/local/bin在$PATH中
生成您提到的错误的唯一方法是将脚本的第一行更改为#!/usr/bin/octave - -或#!/usr/bin/octave -q -f。
这给了我们
$ ./test.sh
/usr/bin/octave: invalid option -- ' '这意味着在您的机器上的脚本中,shebang行是不正确的,或者是被错误地解释了。
验证第一行在脚本中是否正确。
另外,如果行更改为#!/usr/local/bin/octave -q或#!/usr/local/bin/octave -f,还会发生什么。
有关解析shebang行的更多信息,请参见:
https://stackoverflow.com/questions/9659711
复制相似问题