问题描述
我想做些类似的事情
systemd-ask-password --keyname=domain:pw --accept-cached Password:
来自Expect。从终端,此命令可以很好地工作,可以返回已存在的高速缓存密码,或者提示输入并然后进行高速缓存。但是,我还没有找到一种方法使其与expect
进行交互。
send "systemd-ask-password --keyname=domain:pw --accept-cached Password:\r"
不产生与之交互的输出,并且
spawn "systemd-ask-password --keyname=domain:pw --accept-cached Password:\r"
说": no such file or directory...
,这意味着生成的进程甚至没有使用相同的密钥环。
我很乐意使用较低级别的keyctl
,但与此同时我得到了相同的结果
在tty上显示systemd-ask-password
或keyctl
的正确语法是什么?
解决方法
我认为您的意思是使用当前所在的tty运行命令。这可以使用exec
完成。例如,以下外壳交互(****
是我键入none
的位置):
$ cat <<\! >myprog
set pw [exec systemd-ask-password --keyname=domain:pw --accept-cached Password:]
send_user "you said pw=$pw\n"
!
$ expect myprog
Password: ****
you said pw=none
$ expect myprog
you said pw=none
,
如果我要作为独立的事情来作为生成的子进程来运行,那么我期望使用以下方式启动它:
spawn systemd-ask-password --keyname=domain:pw --accept-cached Password:
send
这样做的唯一原因是,如果有一个受控制的外壳,我们希望它为我们执行该外壳(也许是因为它将在远程计算机上运行)。
可能需要自动处理可能的询问密码并管理结果。当然。但是为了进行测试,请在该interact
之后放置一个spawn
命令,以便您可以直接与子流程进行对话。