別の関数出力でシェルスクリプトの一意の文字列をどのように更新できますか?

別の関数出力でシェルスクリプトの一意の文字列をどのように更新できますか?

怠惰なので、openvpnを自動的に起動する一連の非常に「汚れた」スクリプトを書いています。私が使用している設定ファイルはvpnbook.com/freevpnから入手したものです。

私が使用するパスワードを取得するには:

lynx --dump --nolist vpnbook.com/freevpn | grep -i password | sort -u | cut -b 18,19,20,21,22,23,24

パスワードはウェブサイトから返されます。

次に、Expectスクリプトを使用して自動的にログインします(ユーザー名は常にvpnbookですが、パスワードは曜日によって変わります)。

#!/usr/bin/expect -f
spawn openvpn /vpn/vpnbook-ca1-tcp80.ovpn ### my vpn configuration file ###
expect "*?sername:*"
send -- "vpnbook\r"
expect "*?assword:*"
### This next line sends the password that changes by the week, which I...
###...unfortunately need to update manually (for lack of a better method):
send -- "weekly-password\r" 

パスワードを自動的に更新しようとしたときに発生する問題:

1)予想される環境では、lynxを直接呼び出すことはできません。

2)パスワードの変更により、先週の固有のパスワードフレーズを更新されたバージョンに変更する方法がわかりません。

send -- "unique-previous-password\r" 

3)lynx関数によって出力された文字列を入力変数として使用して、先週のパスワード(私の予想スクリプトで)を編集する方法がわかりません。

私が「最もスマートな」プログラマーでもなく、最も効率的なプログラマーでもないことは明らかです。しかし、最終的に私の唯一の目標は、単一のコマンドを入力してVPNを完全に初期化することです(前述のように私は怠惰です)。

どんな助けでも大変感謝します。ありがとうございます!

ベストアンサー1

expect/スクリプトでは、次のものをtcl使用できます。

send "$env(PASSWORD)\r"

expect以下を使用してスクリプトを呼び出します。

PASSWORD=$(elinks -dump...) /path/to/your/expect/script

短い名前を使用できますcut -b18-24

おすすめ記事