如何在.xbindkeysrc绑定命令并让终端执行后自动关闭?
解决方案
问题1:终端执行完命令后自动关闭
要让终端执行完命令后自动关闭,核心是确保终端启动的shell在完成所有操作后退出。在sh -c的命令末尾添加exit,就能让shell执行完逻辑后退出,终端随之关闭。
问题2:将完整命令整合到.xbindkeysrc
.xbindkeysrc的命令需要正确处理引号嵌套,避免解析错误导致无法触发。外层用双引号包裹整个终端启动命令,内层用单引号包裹shell要执行的逻辑,同时避免提前展开命令(不要用$()直接在外层展开)。
最终可用的.xbindkeysrc条目
"gnome-terminal -- sh -c 'pass=$(keepassxc-cli show -sa password path/to/MYKEEPASS.kdbx MY_ENTRY) && printf "%s\n" "$pass" | sudo openconnect --background --protocol=gp https://my.url --user=MYUSERNAME --passwd-on-stdin --script /etc/vpnc/vpnc-script; exit'"
关键细节说明
- 引号嵌套:外层双引号适配.xbindkeysrc的语法,内层单引号包裹shell命令,避免特殊字符和管道被错误解析。
- 可靠的密码传递:用
printf "%s\n" "$pass"替代echo $pass,避免密码含特殊字符(如换行、-开头)时出现异常。 - 解决vpnc-script错误:添加
--script /etc/vpnc/vpnc-script指定脚本路径,解决sudo执行时环境变量缺失导致的脚本找不到问题(如果你的脚本路径不同,替换为对应路径即可)。 - 确保终端关闭:
exit命令确保shell执行完所有操作后立即退出,终端随之关闭;openconnect的--background参数让VPN后台运行,不会阻塞shell执行后续命令。
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

