我正在尝试使用 .xbindkeysrc 将命令绑定到密钥,即该命令从 keepassxc 检索密码,并将其作为标准输入回显到 openconnect (用于 VPN 连接)命令,最后关闭终端。以下内容完成了所有这些工作,并且有效:
psswd=`keepassxc-cli show -sa password path/to/MYKEEPASS.kdbx MY_ENTRY` ; echo $psswd | sudo openconnect --background --protocol=gp https://my.url --user=MYUSERNAME --passwd-on-stdin ; exit
但是,这不能作为 .xbindkeysrc 中的命令,它需要在终端中执行,这可以通过将前面的代码放在"$()"
如下(同样,这有效),但没有“; exit
“最后一位(它不起作用),因此运行完整命令后终端不会关闭。
gnome-terminal -e "$(psswd=`keepassxc-cli show -sa password path/to/MYKEEPASS.kdbx MY_ENTRY` ; echo $psswd | sudo openconnect --background --protocol=gp https://my.url --user=MYUSERNAME --passwd-on-stdin)"
Q1:执行完整命令后如何告诉终端关闭?
此外,这种更简单的语法(在""
) 由 .xbindkeysrc 理解:
"gnome-terminal -e "sudo openconnect --protocol=gp https://my.url --user=MYUSERNAME""
但只需添加""
当我按下绑定键时,完整的命令不足以让 .xbindkeysrc 运行它;这引出了我的第二个问题:
Q2:如何将完整命令集成到.xbindkeysrc中?
多谢
编辑:使用后格里沙·莱维特 https://stackoverflow.com/users/1072229/grisha-levit的回答:
"gnome-terminal -- sh -c 'pass=$(keepassxc-cli show -a password my_keepass_DB my_ENTRY) && printf "%s\n" "$pass" | sudo openconnect --background --protocol=gp https://my.url --user=my_NAME --passwd-on-stdin'"
vpnc-script 有问题,如第 2,5-7 行所示:
没有的位gnome-terminal --
确实有效:
sh -c 'pass=$(keepassxc-cli show -a password my_keepass_DB my_ENTRY) && printf "%s\n" "$pass" | sudo openconnect --background --protocol=gp https://my.url --user=my_NAME --passwd-on-stdin'
但这在 .xbindkeysrc 中不起作用