expect 変数の使用に問題があります。

expect 変数の使用に問題があります。

シェルスクリプトを使用してVPNを自動化しようとしています

私がやりたいのは、Web ページ (curl) を取得して、それを解析してパスワードを取得することです。通常のスクリプトを書くと、次のようになります。

var=$(curl -i http://www.vpnbook.com/freevpn | grep "Password: <strong>*")
echo ${var:26:8}

パスワードを出力します。

ここで、これを 経由で解析しexpect、保存してから、openvpnコマンドを実行します。

spawn sudo openvpn --config vpnbook-euro2-tcp443.ovpn
expect "Enter Auth Username:"
send "vpnbook"
expect "Enter Password: "
send $pass

この変数を適切に設定できませんpass

何か案は?

答え1

環境を使用して値を保存し、expect のenv配列を使用して値を取得できます。

var=$(curl -i http://www.vpnbook.com/freevpn | grep "Password: <strong>*")
export passwd=${var:26:8}
expect -c '
    spawn sudo openvpn --config vpnbook-euro2-tcp443.ovpn
    expect "Enter Auth Username:"
    send "vpnbook"
    expect "Enter Password: "
    send $env(passwd)
    interact
'

答え2

私は、vpnbook の自動接続で同じことをやろうとしていました。他の回答を使用して自分のバージョンを作成し、必要なファイルをすべてダウンロードして最新の状態に保っています。これで、vpn book に接続するワンボタン スクリプトになりました。

#!/bin/bash

rm vpnbook*
rm VPNBook*
curl -O http://www.vpnbook.com/free-openvpn-account/VPNBook.com-OpenVPN-US1.zip
unzip VPNBook.com-OpenVPN-US1.zip
var=$(curl -i http://www.vpnbook.com/freevpn | grep "Password: <strong>*")
export passwd=${var:26:8}
expect -c '
    spawn sudo openvpn --config vpnbook-us1-tcp80.ovpn
    expect "Enter Auth Username:"
    send "vpnbook\r"
    expect "Enter Password: "
    send "$env(passwd)\r"
    interact
'

関連情報