我尝试使用.xbindkeysrc将命令绑定到密钥,即此命令从keepassxc检索密码,并将其作为stdin回显到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:如何让终端在执行full命令后关闭?
此外,这个更简单的语法(在""
中)可以被.xbindkeysrc理解:
"gnome-terminal -e "sudo openconnect --protocol=gp https://my.url --user=MYUSERNAME""
但是简单地将""
添加到完整命令中并不足以让.xbindkeysrc在我按下绑定键时运行它;这就引出了我的第二个问题:
Q2:如何在.xbindkeysrc中集成完整的命令?
多谢了
编辑:使用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中不起作用
1条答案
按热度按时间fhg3lkii1#
gnome-terminal
中作为位置参数运行,而不是使用-e
选项。(即gnome-terminal -- cmd arg...
)sh -c
。所以命令可能是这样的:
如果这样做有效,它应该在启动
openconnect
命令后退出终端,因此不需要exit
。在.xbindkeysrc中没有什么特别之处--只需要将上面的命令用双引号括起来。