PowerShell脚本启动程序按Ctrl+C中断后未执行后续命令问题咨询
现象说明
你观察到的行为是PowerShell的默认设计机制:按下Ctrl+C触发终止请求时,PowerShell会立刻中断当前处于运行阻塞状态的命令(本场景中即启动DynamoDBLocal的java命令),默认不会顺延执行该命令之后的脚本语句,因此末尾的路径还原命令无法触发。
解决方法
不需要修改PowerShell全局配置,直接在脚本中使用try/finally语句块即可保证清理逻辑稳定执行:finally块的代码不受脚本正常退出、Ctrl+C中断、运行报错的影响,始终会被强制执行。
修改后的完整脚本如下:
$originalPath=pwd D:\code\ps1\misc\title.ps1 "dynamo db" $CURPATH = "$PSScriptRoot\path.txt" $DB_DIR= Get-Content $CURPATH try { cd $DB_DIR java -D"java.library.path=./DynamoDBLocal_lib" -jar DynamoDBLocal.jar } finally { # 工作路径还原逻辑放在此处,中断时也会正常执行 cd $originalPath }
如果需要实现Java进程本身的优雅退出(比如保证DynamoDBLocal把内存数据落盘后再终止),可以额外在脚本中捕获Ctrl+C信号后主动向Java进程发送温和终止指令,等进程退出后再走finally块的清理逻辑,对于当前还原工作路径的需求,上述try/finally写法已经完全满足要求。
内容的提问来源于stack exchange,提问作者deostroll
相关产品推荐
相关产品推荐

