我正在尝试编写一个可以作为可执行文件运行的Octave脚本。
我使用的是octave版本3.6.0。我正在运行从here下载的以下脚本:
#!/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
我收到octave命令提示符。我做错了什么?
答案 0 :(得分:3)
我假设您使用某种Unix / Linux系统。文件是否为“DOS”格式,带有DOS样式的行结尾?这可能会导致解释命令的方式出现问题。
答案 1 :(得分:0)
你的shebang行(顺便说一下,它有一个不应该的空格)正在调用/usr/local/bin/octave
,但错误来自/usr/bin/octave
。这是一个错误吗?如果是这样,您需要复制并粘贴代码和错误。如果不是,local
版本可能是在非交互式运行时使用不正确的选项调用二进制文件的脚本。特别是,看起来脚本(或者至少是某些东西)试图使用长选项(--option
),并且二进制文件不支持它(所以它将它解释为一个短选项)。 / p>
答案 2 :(得分:0)
首先,发布的脚本在我的系统上正常运行。
我键入nano test.sh,我将其复制到文件中,我将第一行更改为#!/usr/bin/octave -qf
。
我按下Ctrl-O和Ctrl-X。
然后我使用chmod + x test.sh。
使脚本可执行然后我使用./test.sh或octave -qf test.sh运行脚本,它按预期工作。
注意: 我系统上的Octave是
$ 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行的更多信息,请参阅: