如何将命令的标准输出发送到 Expect 输入?

如何将命令的标准输出发送到 Expect 输入?

我想编写一个 shell + expect 脚本,通过 LastPass CLI 实用程序自动填充我的密码lpass。我不确定如何完成将返回的密码发送lpass到 expect 脚本中的密码输入。

到目前为止的预期脚本看起来像这样:

# The beginning isn't important
expect -exact "\r
Please enter your username and password.\r
Username:"
send -- "my-username\r"
expect -exact "my-username\r
Password:"
send -- $(lpass show --password service\ im\ connecting\ to)
expect -exact "\r
# The rest of the expect script follows

我不确定 $(...) 中的位实际上应该如何写......

答案1

您想exec在脚本中使用函数来获得与shell 中expect相同的行为$(...)

参见下面的示例:
让我们使用下面的外部程序4expect.sh,我们将使用脚本来提供expect它:

#!/bin/sh
# Test program : let set filename as "4expect.sh"
# in the same directory where expect script will work

echo; read -p 'question: ' answer
echo "Got answer:>${answer}<"

这里我们的脚本将等待来自外部程序的“问题”,并将当前目录中的总文件数(获取外部程序的输出和)expect提供给它,以供使用:lsegrepexpectsend

#!/usr/bin/expect -f

spawn -noecho ./4expect.sh
expect -re "question" { send -- [exec ls -la . | egrep "^total" ]\r }
interact

puts "\nDone.\n"
exit

相关内容