背景問題
最近、開発プロセスでは、多くの場合、我々は、各ファイル転送のPCおよび組み込みシングルボードを達成する必要があります。この問題は、アップロードとダウンロードするファイルのSCP(SSHログインベースのセキュアなリモートファイルコピーコマンド)を介して達成することができます。しかし、各伝送の過程で、必要が手動でパスワードを入力します。操作が複雑ではなく、それぞれのファイル転送は、常に効果的な解決策を見つけるためのシェルスクリプトで、より迷惑、もない事です。が、もしそうであれば、このプロセスを自動化する方法はありますか?だから、この小さな便利なツールを見つけることを期待しています。
期待するものです
期待は、人間の介入なしでインタラクティブなタスクの通信処理を完了するために使用される無料のツールのプログラミング言語です。
シェルは、このようなサイクリングなど、達成することができますが、判定機能制御が流れるが、いくつかのケースでは、必要に情報交換を実現するために、まだ手動の介入によって行われることがあります。情報の相互作用を達成するために、発明し、時間をかけ続けると、より強力になりました期待しています。期待のTcl必要なプログラミング言語の最初のシステムにインストールする必要があります期待して実行するように、サポートをTclの。
インストールが期待します
システムをインストールすることが予想される場合はまず、参照してください。
#whereisは期待
ツールはTCLに依存している期待し、そうもTCLをインストールする必要があります。
まず、バージョン8.4.19をインストールするには、ここで、TCLをダウンロードしてインストール。
#wgetのhttps://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz
#タールzxvf tcl8.4.19-src.tar.gz
ます。#cdのtcl8.4.19 / UNIX &&に./configure
#が作る
#をインストールします
次に、ダウンロードしてインストールすることを期待。
#wgetのhttp://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz
#タールzxvf expect5.45.tar.gz
#CD expect5.45
#./configureを--with- TCL = / usr / local / libディレクトリ--with-tclinclude = .. / tcl8.4.19 /ジェネリック
#作る
#はmake installを
#のLN -sは/ usr / local / binに/期待は/ usr / binに/期待を
configureコマンドは、-with-tclinclude入ってくる一般的なインストールパッケージのtclファイルフォルダのパスオプションを使用する必要があります。
インストールが完了した後、コマンドを期待して実行し、インストールが成功したかどうかを確認します。
#期待
> expect1.1を
基本操作
その上で卵などのスクリプト一般的に使用されるコマンドを期待し、期待して、送って、対話と。
産卵シェルコマンド
当時は、私たちはシェルコマンドを実行したいです、子プロセスを開始します
「こんにちは」を期待
あなたは、文字列を受け入れ、文字列が一致するまで、ブロックに一致するか、実装をダウン継続する前にタイムアウトを待つことはありません期待していた場合、「こんにちは」の文字列からコマンドを受け入れるためのプロセス
{「R \ hello」を送信}
コンテンツマッチした送信処理の列、および手動入力等価コンテンツ、 'Hi「の出力は、」こんにちは「」\ r「は、リターン文字を表します。
対話
コンソールへのコマンドコントロールは、それが手動で操作することができます。一般的に、手動で特定のコマンドを実行した後に再度ログインを自動化するスクリプトを使用するために使用されます。スクリプトは、この1文でない場合は、スクリプトを実行すると、自動的に終了します。
設定されたタイムアウト30
期待するコマンドが出ブロックされたときに自動的にダウンしていきます、30代のタイムアウトにタイムアウトを設定します。タイムアウト設定は-1、それは文字列マッチングに見下ろし続けることを期待するまでブロックです。10秒にタイムアウトタイムアウトのデフォルト値。
[LINDEXの$ ARGVのN]
スクリプトは、スクリプト内でn番目のパラメータを実行したときには、渡された取得するには、このコマンドを使用することができます。ここでargvのパラメータがARGVを渡されたパラメータに加えて、渡され、argcが$は、スクリプト名を表明argv0渡す追加引数の数が、あります。
また、我々はまた、SN引数エン秒に最初に取得するには、[LRANGE $ ARGV SN EN]コマンドを使用することができます。
例を参照
login.exp:
#!は/ usr / binに/期待
腹腔SET [LINDEX ARGV $ 0]
このコマンドは、最初の引数が来るように可変IPの値を設定することです#。【LINDEX $ ARGV 0]は第1のパラメータの値によって表される
[LINDEX ARGV $ 1] SET口
このコマンドは、変数の値が入力ポートに入ってくる第二パラメータを設定され#。【LINDEX $ ARGV 1]第2のパラメータで表される値で
設定されたpasswdの「123456」SSH $ -p $ IP産卵ポート
変数を使用して#は、シェルスクリプトのように、このメソッドを使用する
期待{
内容を返し、#コンテンツマッチ出力を、exp_continue示された「*パスワード」{送信「123456 \ R」}次のステップに進む
「はい/ NO「{送信」はい\ R「; exp_continue}
」パスワード:「{送信」$のpasswd \ rを「}
}
INTERACT
実行#の後に、クロス状態を維持するために、転送は手動で、コンソールにすることができます。この時間を制御しますA。あなたは、文の完了後、ログオンしていない場合は終了ではなく、リモート端末でご利用いただけます。あなただけ終了するコマンドの実装を過ぎてログオンする場合は、[EOFを期待する]に変更することができます
次のように:
[ルート@ localhostのシェル]#猫のlogin.exp
[ルート@ localhostのシェル]直接空間間隔、最初のパラメータのパラメータの#./login.exp 192.168.2.11 22#複数:192.168.2.11第パラメータ22
この記事では、記事、以下の統合から来ています: