Часть-1: В октаве 3.4.3 (на centos 6.6) следующий файл сценария "joe.m" (но для 3.x минус --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'
Но в октаве 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", то в октаве 3.4.4 вывод будет:
calling jim
program_name: 'jim.m'
в октаве 4.2.1 теперь предупреждение избегается, но по-прежнему отсутствует строка «вызывающий джим».
Часть-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, или как вызвать 4.x с дополнительной опцией, чтобы вести себя совместимо с 3.x?Как выполнить код верхнего уровня в 4.x, даже когда функции определены?
Как можно определенным образом (без проб и ошибок) определить, какая функция будет автоматически вызываться (и с какими аргументами) в 4.х без документации то же самое?Этого примера недостаточно, чтобы его закрепить, поскольку есть одна и только одна функция: если есть несколько функций (joe и jim), имеет ли значение порядок относительно того, совпадает ли одно или нет имя файла?
Редактировать: я включаю шебанг (автономный сценарий), пытаясь не «задавать неправильный вопрос» или преждевременно оптимизировать вопрос в соответствии с моим «попыткой решения», но поведение с ним или без него одинаково.Мне нужен скрипт, чтобы: не использовать абсолютный путь к октаве и принимать дополнительные отдельные опции (я не мог объединить --no-gui
в -qf
в 4.2.1).Ваши упрощения приветствуются.