Linux 期待の詳細な説明

Aug 09, 2019 pm 02:22 PM
linux

Linux 期待の詳細な説明

expect はどこでも見られます

expect コマンドを初めて見たのは、私が初めてイベントに参加したときでした。当時、それは自動デプロイメント、MD5 比較、およびリリースのための本格的なオンライン ツールのセットで、社内の有能な人材がシェル スクリプトを使用して作成しました。スクリプトと多くの期待されるコマンド。私はexpectコマンドの使い方がまったく理解できなかったので、時間を見つけてexpectコマンドについてこの記事にまとめました。

推奨: [Linux ビデオ チュートリアル ]

まずは質問をしてください

現在、2 つの Linux ホスト A と B があります。 、ホスト A からホスト B に SSH 接続し、ホスト B でコマンドを実行する方法は? このプロセスを完全に自動化するにはどうすればよいですか?この方法を使用することもできます:

ssh admin@10.220.20.15 "ls"
ログイン後にコピー

ただし、この方法は扱いにくく、毎回パスワードを入力する必要があり、複雑なロジックやコマンドを実行することはできません。では、完全自動化を実現するにはどうすればよいでしょうか?これには、今日の記事で要約した期待が使用されます。

期待とは何ですか?

expect は、人間の介入なしにインタラクティブなタスクを自動化するために使用される無料のプログラミング ツールです。端的に言うと、expect は自動対話機能を実装するために使用されるソフトウェアのセットです。

実際の作業では、コマンド、スクリプト、またはプログラムを実行するとき、これらのコマンド、スクリプト、またはプログラムは実行を継続するために端末から特定の指示を入力する必要があり、これらの入力は手動で行う必要があります。 Expect を使用すると、プログラムのプロンプトに従ってプログラムに提供される標準入力をシミュレートできるため、自動化された対話型実行が実現します。これは期待通りです! ! !

##expect の基本##expect を使用する場合は、基本的に次の 4 つのコマンドを処理します。

#sendコマンドは文字列パラメータを受け取り、そのパラメータをプロセスに送信します。 Linux 期待の詳細な説明

expect コマンドは send コマンドの反対です。expect コマンドは通常、プロセスからのフィードバックを待つために使用されます。その後、プロセスからのフィードバックに基づいて、対応する対話型コマンドを送信します。

spawn コマンドは、新しいプロセスを開始するために使用されます。spawn 後の send コマンドと Expect コマンドは両方とも、spawn を使用して開かれたプロセスと対話します。

interact コマンドは、実際にはあまり使用されません。通常、spawn、send、expect コマンドでタスクを適切に完了できますが、特別な場合には、interact コマンドを使用する必要があります。interact コマンドは次のとおりです。主に自動化を終了し、手動操作に入るために使用されます。たとえば、spawn、send、expect コマンドを使用して ftp ログイン ホストを完了し、ファイルをダウンロードするタスクを実行しますが、ファイルのダウンロードが完了した後も ftp コマンド ラインの状態を維持できるようにしたいと考えています。後続のコマンドを手動で実行することもできますが、この場合は、interact コマンドを使用すると、このタスクを非常にうまく完了できます。

実践的なコード分析

上記は予想を要約し、特によく使用されるいくつかのコマンドについて詳しく説明します。以下は、一般的に使用されるいくつかの Expect スクリプトを通じて、expect を使用して日常のタスクを完了する方法の詳細な説明です。

#!/usr/tcl/bin/expect
set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
ログイン後にコピー

これは、expect の基本的な使用法を示す、非常に単純な Expect サンプル コードです。

#!/usr/tcl/bin/expect: スクリプトを解釈するために Expect を使用します;

set timeout 30: タイムアウトを秒単位で設定します (デフォルトは 10 秒です);

set host "101.200.241.109": 変数を設定;

spawn ssh $username@$host: spawn は、expect 環境に入った後に実行できるexpect の内部コマンドです。expect がインストールされていない場合、または直接 デフォルトの SHELL で実行すると、spawn コマンドが見つかりません。その主な機能は、対話型の指示を提供するために ssh 実行プロセスにシェルを追加することです;

expect "*password*": Expect ここでも、expect の内部コマンドです。このコマンドは、最後に実行されたかどうかを判断することを意味します。出力結果に文字列 "password" が含まれている場合は、すぐに返されます。そうでない場合は、一定の時間が経過してから返されます。ここでの待ち時間は、以前に設定した 30 秒です。

send " $password\r": 対応する出力結果が一致すると、オープン ssh プロセスにパスワードが送信され、対話型アクションが実行されます。

interact: 実行完了後、対話型状態が維持され、制御はコンソールに引き継がれ、この時点で手動で操作することができます。このような文がない場合は、リモート端末に留まらず、ログイン完了後に終了します。

これは、上記の単純なスクリプトの分析です。上記の例では、expect - mode-action に非常に重要な概念が含まれています。つまり、上記の Expect "*password*" {send " $password \r"}このコードが表す意味。

モード アクション

コード Expect "*password*" {send "$password\r"} と組み合わせて、「モード アクション」について説明します。簡単に言うと、パターンが一致すると対応するアクションが実行され、パスワード文字列が一致するとパスワードが入力されます。次のようなコードも表示される場合があります:

expect {
    "password" {
        send "$password\r"
        exp_continue
    }
    eof
    {
        send "eof"
    }
}
ログイン後にコピー

其中exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。

传参

很多时候,我们需要传递参数到脚本中,现在通过下面这段代码来看看如何在expect中使用参数:

#!/usr/tcl/bin/expect
if {$argc < 3} {
    puts "Usage:cmd <host> <username> <password>"
    exit 1
}
set timeout -1
set host [lindex $argv 0] 
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
ログイン後にコピー

在expect中,\$argc表示参数个数,而参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0],以此类推。

总结

能够在工作中熟练的使用Shell脚本就可以很大程度的提高工作效率,如果再搭配上expect,那么很多工作都可以自动化进行,对工作的展开如虎添翼。如果你会Python的话,你的视野将会更加开阔,那个时候你又会“嫌弃”expect了。

以上がLinux 期待の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Apr 01, 2025 pm 03:06 PM

エラーの原因とソリューションPECLを使用してDocker環境に拡張機能をインストールする場合、Docker環境を使用するときに、いくつかの頭痛に遭遇します...

ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? Apr 01, 2025 pm 02:48 PM

多くのウェブサイト開発者は、ランプアーキテクチャの下でnode.jsまたはPythonサービスを統合する問題に直面しています:既存のランプ(Linux Apache MySQL PHP)アーキテクチャWebサイトのニーズ...

APSChedulerタイミングタスクをMACOSのサービスとして構成する方法は? APSChedulerタイミングタスクをMACOSのサービスとして構成する方法は? Apr 01, 2025 pm 06:09 PM

nginと同様に、APSChedulerタイミングタスクをサービスとして構成する場合、APSChedulerタイミングタスクをMACOSプラットフォームでサービスとして構成します...

マルチスレッドをC言語で実装する4つの方法 マルチスレッドをC言語で実装する4つの方法 Apr 03, 2025 pm 03:00 PM

言語のマルチスレッドは、プログラムの効率を大幅に改善できます。 C言語でマルチスレッドを実装する4つの主な方法があります。独立したプロセスを作成します。独立して実行される複数のプロセスを作成します。各プロセスには独自のメモリスペースがあります。擬似マルチスレッド:同じメモリ空間を共有して交互に実行するプロセスで複数の実行ストリームを作成します。マルチスレッドライブラリ:pthreadsなどのマルチスレッドライブラリを使用して、スレッドを作成および管理し、リッチスレッド操作機能を提供します。 Coroutine:タスクを小さなサブタスクに分割し、順番に実行する軽量のマルチスレッド実装。

PythonインタープリターはLinuxシステムで削除できますか? PythonインタープリターはLinuxシステムで削除できますか? Apr 02, 2025 am 07:00 AM

Linux Systemsに付属するPythonインタープリターを削除する問題に関して、多くのLinuxディストリビューションは、インストール時にPythonインタープリターをプリインストールし、パッケージマネージャーを使用しません...

web.xmlを開く方法 web.xmlを開く方法 Apr 03, 2025 am 06:51 AM

web.xmlファイルを開くには、次の方法を使用できます。テキストエディター(メモ帳やテキストエディットなど)を使用して、統合開発環境(EclipseやNetBeansなど)を使用してコマンドを編集できます(Windows:Notepad web.xml; Mac/Linux:Open -A Textedit Web.xml)

See all articles