Bash脚本执行OMShell-terminal后无法自动输入后续命令如何解决
OMShell-terminal 自动执行Modelica命令的脚本修改方案
问题根因
原脚本无法生效是因为Bash逐行执行指令时,运行OMShell-terminal会阻塞当前进程,直到OMShell退出才会执行后续行的内容。且后续的loadModel等命令是OMShell的专属语法,Bash本身无法识别,也不会自动注入到OMShell的交互环境中。
解决方案
方案1:通过Here Document直接传递命令
使用Bash的Here Document语法,将需要执行的OMShell命令直接作为标准输入传递给进程,修改后的脚本如下:
#!/bin/bash OMShell-terminal << EOF loadModel(Modelica); loadFile("Filename"); // 请替换为实际的起止时间参数,此处仅为示例 simulate(filename, startTime=0, stopTime=1); EOF
注意所有OMShell命令末尾必须加英文分号,否则会触发语法错误。
方案2:独立mos脚本执行(更适合复杂场景)
如果执行逻辑复杂、需要复用,可以将Modelica操作单独封装为.mos后缀的OM脚本,再通过Bash调用执行:
- 新建
run_model.mos脚本,写入OMShell命令:
loadModel(Modelica); loadFile("Filename"); simulate(filename, startTime=0, stopTime=1);
- 修改Bash脚本内容:
#!/bin/bash OMShell-terminal run_model.mos
该方式可读性和可维护性更高,也方便单独调试Modelica执行逻辑。
内容的提问来源于stack exchange,提问作者sridhatta aithal
相关产品推荐
相关产品推荐

