运行 来自 powershell 的八度脚本并等待它完成

Run octave script from powershell and wait for it to finish

我正在尝试从 Powershell 运行 一个非常简单的八度 .m 文件,但我无法让 Powershell 等待它完成。事实上,它启动了脚本执行,但随后立即开始执行下一行。

正如我所说,脚本非常简单,只是一个测试

a=100
% Saving just to be sure that the script excuted
save test.mat a

% Pausing to be sure that the execution is not too fast  
pause(10)
disp("no way")

在 powershell 中我只是 运行

octave --persist test.m

但提示不会等待 Octave 完成执行。似乎不知何故 运行 它在另一个进程中是异步的。

我已经尝试运行使用等待选项从批处理脚本

START /W octave --persist test.m

结果还是一样

提前致谢

编辑 1

感谢@Trey Nuckolls 我正在使用这个补丁:

$Donefilename = 'done'
if (Test-Path $Donefilename) {
    Remove-Item $Donefilename
    Write-Host "Last execution $Donefilename has been deleted"
  }
else {
    Write-Host "$Donefilename doesn't exist"
}

octave --persist test.m

do{
    $i++
    Start-Sleep -Seconds 2 
    $OctaveComplete = Test-Path -Path $Donefilename 
 }
 until ($OctaveComplete -or ($i -eq 30))

使八度脚本在执行结束时写入一个空的“完成”文件。虽然不是最好的解决方案;例如,我无法重定向执行输出。

编辑 2

所以,感谢你们所有的回复和评论,我设法找到了问题。似乎当我从 windows 调用 octave 时,它不是在调用可执行文件,而是在调用其他东西。获取正确的路径并执行:

& "C:/Program Files/GNU Octave/Octave-6.4.0/mingw64/bin/octave-cli.exe" test.m 

完美运行(您只需在脚本末尾添加 exit )。所以,这是一个路径问题。

您可以考虑将等待循环放入您的调用脚本中,例如...

do{
   $i++
   Start-Sleep -Seconds 10 #Assuming that 30 seconds is way too long
   $OctiveComplete = <**Boolean returning function that becomes 'True' when run is complete**>
}
until ($OctiveComplete -or ($i -eq 4))

这将直接在调用 Octave 的行之后。