Вот полный пример, учитывая путаницу в комментариях.
Предположим, вы создаете скрипт с именем plotWithoutExiting.m
, предназначенный для вызова непосредственно из оболочки linux, а не из интерпретатора octave:
#!/opt/octave-4.4.1/bin/octave
h = plot(1:10, 1:10);
waitfor(h)
disp('Now that Figure Object has been destroyed I can exit')
Первая строка в linux соответствует синтаксису 'shebang';этот специальный комментарий сообщает оболочке bash, какой интерпретатор следует запустить для выполнения приведенного ниже сценария.Я использовал местоположение моего исполняемого файла октавы здесь, ваш может быть расположен в другом месте;Адаптируйте соответственно.
Затем я изменяю разрешения в оболочке bash, чтобы сделать этот файл исполняемым
chmod +x ./plotWithoutExiting.m
Затем я могу запустить файл, запустив его:
./plotWithoutExiting.m
В качестве альтернативы вы можете пропустить разрешения «shebang» и исполняемый файл и попытаться запустить этот файл, явно вызвав интерпретатор октавы, например:
octave ./plotWithoutExiting.m
или даже
octave --eval "plotWithoutExiting"
Youтакже можно добавить параметр --no-gui
, чтобы предотвратить мгновенное появление октавного графического интерфейса пользователя.
Затем должен запуститься приведенный выше сценарий, захватив график в дескриптор объекта фигуры h
.waitfor(h)
затем приостанавливает выполнение программы до тех пор, пока объект фигуры не будет уничтожен (например, закрытием окна вручную).
Теоретически, если вам не нужно собирать маркеры фигуры, вы можете просто использовать waitfor(gcf)
, чтобыприостанавливать выполнение до тех пор, пока последний активный объект фигуры не будет уничтожен.
Как только это произойдет, программа продолжит работу в обычном режиме, пока не завершится.Если вы не используете интерпретатор октав в интерактивном режиме, это обычно также приводит к выходу из среды октав (вы можете предотвратить это, используя параметр --persist
, если это не то, что вам нужно).
Надеюсь, это поможет.