【发布时间】:2018-11-21 04:49:15
【问题描述】:
第 1 部分:在 octave 3.4.3(在 centos 6.6 上)跟随脚本文件“joe.m”(但对于 3.x minus --no-gui):
#!/bin/bash
# for-bash:
#{
exec octave -q --no-gui --no-init-file "$0" ${1+"$@"}
#}
# for-octave:
function jim ()
printf ("program_name: '%s'\n", program_name ());
endfunction
printf ("calling jim\n")
jim
产生输出:
calling jim
program_name: 'joe.m'
但在 octave 4.2.1 中,它会发出警告,并显示为自动调用(!?) jim,并且不运行顶级立即代码(!?),没有输出行“调用 jim”:
warning: function name 'jim' does not agree with function filename '/tmp/joe.m'
program_name: 'joe.m'
第 2 部分:如果我将同一文件重命名为“jim.m”,那么在 octave 3.4.4 中,输出为:
calling jim
program_name: 'jim.m'
在 octave 4.2.1 现在可以避免警告,但仍然缺少“调用 jim”行。
第 3 部分:定义零函数后,顶级代码将在两个版本中执行。
在哪里记录或控制这些行为(以及从版本 3 到 4 的行为变化)?没有提到类似的东西:
https://octave.org/doc/v4.2.1/Command-Line-Options.html
https://octave.org/doc/v4.2.1/Executable-Octave-Programs.html
如何编写兼容 3.x 和 4.x 版本的 octave 文件,或者如何使用额外选项调用 4.x 以与 3.x 兼容?即使定义了函数,如何在 4.x 中执行顶级代码?
在没有相同文档的情况下,如何确定性地知道(无需反复试验)在 4.x 中将自动调用什么函数(以及使用什么参数)?这个例子不足以确定它,因为只有一个函数:如果有多个函数(joe 和 jim),那么顺序是否重要,相对于是否匹配文件名?
编辑:我包含 shebang(独立脚本)以试图不“提出错误的问题”或过早地将问题优化为我自己的“尝试的解决方案”,但无论有没有它,行为都是相同的。我需要脚本:不使用八度音程的绝对路径,并接受额外的单独选项(我无法在 4.2.1 中将 --no-gui 合并到 -qf 中)。欢迎您的简化。
【问题讨论】:
-
如果shebang行与问题无关,请将其删除。我花了一段时间来解析它。让人们专注于是重要的事情。请参阅minimal reproducible example(尤其是 minimal 部分!)。
-
谢谢。我做了一个编辑来解释。也许我最好把 shebang 拆分成一个后记。
标签: octave