You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Shell被强制关闭时执行脚本?Steam非Steam游戏云存档需求

非Steam游戏自定义云存档系统:Steam停止按钮触发备份方案

我正在为非Steam游戏搭建自定义云存档系统,需要实现按下Steam的「停止」按钮时自动备份游戏文件(该操作会直接关闭启动游戏的可执行文件)。

尝试过的无效方案

cd "/location_of_backups/"
py savemanager.py --load --auto-override --force
Ryujinx.exe "path/to/game.nsp"
# 按下Steam的关闭按钮后,下面的代码永远不会执行
py savemanager.py --backup
# Ryujinx.exe "path/to/game.nsp" && py savemanager.py --backup 同样无效
# 任何在独立shell中启动的方式也不行

核心问题:Shell脚本本身会被Steam强制关闭,能否在Shell关闭时执行指定的备份代码?

补充说明与最终解决方案

  • 编辑1:该Shell脚本通过Steam启动,是用于启动模拟器游戏、加载/备份存档的包装脚本。必须让模拟器作为主进程运行,因为Steam会将覆盖层附加到这个原始实例上。
  • 编辑2:最初尝试killtermquitint等信号处理,在Python和Bash中均未生效。
  • 编辑3:后续确认信号实际有效,Steam会向进程发送HUP信号。最终实现的工作脚本如下:
#!/bin/bash

handle_HUP()
{
  python3 savemanager.py --backup
  exit
}

trap 'handle_HUP' HUP

python3 savemanager.py --load
$1 "$2"

额外信息:该脚本用于同步主PC与Steam Deck的存档文件。


内容的提问来源于stack exchange,提问作者Tima_ben

火山引擎 最新活动