如何在Expect脚本的send中使用shell命令的输出

问题描述

我写了一个期望脚本来执行登录操作。登录需要2fa代码,可以通过执行shell命令2fa my_login获得此代码。现在如何执行 2fa 命令并将其输出传递到脚本的发送

我需要做类似send -- "$(2fa my_login)"的事情。 $(2fa my_login)的输出应该传递给发送方。

我的脚本

#!/usr/bin/expect -f

set timeout -1

spawn /home/local/apps/forticlientsslvpn/64bit/forticlientsslvpn_cli --server vpn.vpn-domain.com:10443 --vpnuser user-id

expect "Password for VPN:"

send -- "pass\n"

expect "Enter the time-based OTP generated in your device."

send -- "$(2fa my_login)\n"

expect eof

解决方法

使用sexpect

#!/bin/bash

export SEXPECT_SOCKFILE=/tmp/sexpect-bc-iGciUZ.sock

sexpect spawn -close-on-exit /home/local/apps/forticlientsslvpn/64bit/forticlientsslvpn_cli --server vpn.vpn-domaincom:10443 --vpnuser user

sexpect expect  -glob "Password for VPN:"

sexpect send -enter -- "pass"

sexpect expect  -glob "Enter the time-based OTP generated in your device."

auth=$(2fa my_login)

sexpect send -enter -- $auth

sexpect wait