Expectによる自動化されたインタラクション
2232 ワード
*前に書く
最近開発されたプロジェクトでは、このような機能を実現したいと考えています.ローカルプロジェクト作成足場をリモートサーバに配置し、ユーザーがプロジェクトを作成する必要がある場合は、提供されたページにいくつかのプロジェクトインフラストラクチャを入力してコミットするだけで、バックグラウンドは選択に基づいてプロジェクトを自動化し、push上の倉庫を作成します.どのように見るかは非常に簡単なニーズであり、ユーザーがリクエストの作成を開始したときにshellスクリプトをバックエンドで呼び出し、この一連の操作を実現する必要があります.しかし、現在のプロジェクト作成足場ではマルチパラメータ転送はサポートされておらず、ユーザー入力で各パラメータ転送の操作を完了するしかありません.そこで本稿の主役であるExpectを投げ出し,一連の自動化インタラクティブ動作を実現する.
Expectの概要
expectは、人為的な介入を必要とせずに自動インタラクティブなタスクを実現するための無料のプログラミングツールです.はっきり言って、expectは自動インタラクティブ機能を実現するためのソフトウェアです.
実際の作業では、コマンド、スクリプト、またはプログラムを実行する場合、これらのコマンド、スクリプト、またはプログラムは、端末から実行を継続するコマンドを入力する必要がありますが、これらの入力は人為的な手動で行う必要があります.一方expectを用いると,プログラムのヒントに基づいてシミュレーション標準入力をプログラムに提供し,自動化インタラクティブ実行を実現することができる.これがexpect!!!
Expectコマンド
expectを使用する場合は、まずファイルの上部に
#!/usr/bin/expect
を書き込む必要があります.これはexpect
ファイルであることがプロセスに通知されました.シナリオ作成には、以下の「六」のコマンドがほとんど欠かせません.spawn
新しいプロセスexpect
は、プロセスのフィードバックを待つために使用され、プロセスのフィードバックに基づいて、対応するインタラクティブな命令send
は、ユーザが手動で入力コンテンツset
変数値expect eof
自動化終了interact
は自動化を終了し、人工対話Expect構文
expectはtcl構文を使用しています.詳細チュートリアルはTCL基本構文-Tclチュートリアルを参照してください.ここではいくつかの簡単なプロセス制御を提供しています.一般的には十分です.
伝参
expectパラメータ値は
$argv
に格納され、例えば、最初のパラメータが[lindex $argv 0]
であることを推定する.// xxx.sh mike 22 engineer
#!/usr/bin/expect
set name = [lindex $argv 0]
set age = [lindex $argv 1]
set job = [lindex $argv 2]
if/else
if {$a == 'a'} {
set flag = 0
} else {
set flag = 1
}
expect '* xxx *'
send $flag
ループマッチング
一般にexpectマッチングが成功すると文は終了し、
exp_continue
はループマッチングを表す.キーワードを変更した後、最初から一致し続けます.たとえば、ソフトウェアをインストールするときに複数のyesを入力する必要があります.expect {
"*yes/no*" {
send "yes"
exp_continue
}
eof
{
send "eof"
}
}
くり
未完待機