【问题标题】:Executable octave script: 'usr/local/bin/octave: invalid option -- '可执行八度脚本:'usr/local/bin/octave:无效选项--'
【发布时间】:2012-03-17 16:52:43
【问题描述】:

我正在尝试编写一个可以作为可执行文件运行的 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

我得到八度命令提示符。我做错了什么?

【问题讨论】:

  • 您能否将运行/usr/local/bin/octave -qf your_script 的结果添加到问题中?

标签: linux octave


【解决方案1】:

我假设您使用的是某种 Unix/Linux 系统。文件是否为“DOS”格式,带有 DOS 风格的行尾?这可能会导致命令的解释方式出现问题。

【讨论】:

  • 由于其他一切都失败了,并且在另一个文件中正常工作的命令在保存到“错误”文件时失败,我怀疑问题与你建议的行尾有关(我忘了我从网上复制并粘贴了数据)。我使用 gedit 检查并发现,有问题的文件有 Windows 行结尾:/ 我修复了这个问题,问题就解决了。 50分我就给你,因为我应该一开始就听你的!
  • 愚蠢的浪费时间。两种系统,两种不同的结尾方式……谢谢!
【解决方案2】:

您的 shebang 行(顺便说一句,它有一个不应有的空格)正在调用 /usr/local/bin/octave,但错误来自 /usr/bin/octave。这是一个错误吗?如果是这样,您需要为类似的事情复制和粘贴代码和错误。如果不是,local 版本可能是一个脚本,它在非交互式运行时使用不正确的选项调用二进制文件。特别是,看起来脚本(或至少)正在尝试使用长选项 (--option),而二进制文件不支持它(因此它将其解释为短选项)。

【讨论】:

  • 应该是/usr/local/bin。我只安装了一个 Octave。我已经修复了我的代码片段/错误消息以反映 bin 位置。存在(或 #! 中没有空格是一个红鲱鱼 AFAIK),但是我已经删除了空格 - 错误仍然存​​在。
  • @HomunculusReticulli 不过,检查文件看它是否是脚本。
  • 我检查了文件类型以确保(如您所建议的那样)。事实证明 octave 是 octave-3.6.0 的符号链接,它是可执行文件(在同一文件夹中)。我更新了我的脚本文件,但是当我运行它时,出现以下错误:'usr/local/bin/octave-3.6.0: invalid option -- '
【解决方案3】:

首先发布的脚本在我的系统上运行良好。

我输入 nano test.sh,将其复制到文件中,我将第一行更改为 #!/usr/bin/octave -qf

我按 Ctrl-O 和 Ctrl-X。

然后我使用 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行解析的信息,请参见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2019-04-11
    • 2014-03-27
    • 2021-09-28
    • 1970-01-01
    • 2017-01-09
    • 2019-10-14
    • 2013-04-22
    相关资源
    最近更新 更多