expect能够模拟用户的交互输入,这相当有用,因为这使得很多原本需要交互输入的命令可以自动完成,而不需要人工干预。以下是一个简单例子,用来模拟登陆远程ssh:
#!/usr/bin/env expect
set password [lindex $argv 0]
set timeout 60
spawn ssh username@remote.host
expect "password:"
send "${password}\r"
interact
该程序接受一个参数,表示远程主机的用户密码。对于该程序首先需要注意的是,它不是Bash程序,第一行表示它要用expect命令去执行。expect命令是tcl语言带的一个小工具,expect程序实际上也是tcl程序,它遵守tcl語法规则。接下来的一行是tcl中用来获取命令参数的方法。spawn会创建一个子进程,expect会等待spawn出的子进程输出给定的字符串模式出现,或者一直等待程序超时,默认超时时间是10s,可以通过set timeout来改变超时时间。超时时间依赖程序可以给予不同的值,对于外网ssh连接,我们可以将超时时间设置得长一些, 该例子将超时时间设置为60s,对sudo命令,则可以将超时时间设置成1s。send命令用户发送字符串给spawn出的子进程,这是用来模拟用户输入的关键。尤其需要注意的是,回车是用'\r'来代表的,而不是程序语言中通常使用的'\n'。interact用来回到子进程。
分享到:
相关推荐
关于自动化脚本expect的一个例子。本脚本功能是 实现自动输入密码登录到一个server机器上。
首先,通过`Expect->new()`创建一个新的Expect对象,然后使用`spawn`命令启动telnet连接。接下来,依次使用`expect`和`send`命令来模拟用户输入和等待服务器响应,直到完成整个会话流程。 #### 六、总结 Expect是...
下面是一个使用 Expect 发送密码并通过 SSH 远程复制文件的例子: ```bash #!/usr/bin/expect spawn scp /etc/fstab 192.168.8.100:/app/ expect { "yes/no" { send "yes\n"; exp_continue } "password" { send ...
在IT行业中,`expect`是一个强大的自动化脚本工具,它允许程序员或系统管理员与命令行交互,特别是自动处理需要用户输入的情况。`expect`的名字来源于它"期望"特定的输出,然后根据这些输出做出响应。在标题和描述中...
Expect 是一个基于 TCL 语言的扩展工具,专为自动化交互式应用程序设计,如 SSH、FTP 等。它能够模拟用户输入,实现自动化控制。在 Expect 中,有三个核心命令:spawn、expect 和 exp_send,它们是构建 Expect 脚本...
在这个例子中,脚本首先启动一个SSH连接,等待“password:”提示出现,然后发送密码,并交还控制权给用户。 3. **常见用法**: - 自动化SSH登录:通过脚本自动登录远程服务器,无需手动输入密码。 - 脚本化命令...
`spawn` 命令用于启动一个新的子进程,并执行指定的命令。这里执行的是 `sudotouchtestfile`。 3. **捕获输出**: ```bash expect "assword" ``` `expect` 命令用于等待子进程输出匹配的字符串。当子进程输出...
接下来,我们将通过一个具体的例子来展示 expect 的使用。在 CentOS 系统中,由于默认不支持 NTFS 文件系统,我们需要手动编译内核添加支持。在编译过程中可能会遇到错误,例如在编译 fs/ntfs 相关模块时,由于内核...
在这个例子中,`spawn`命令启动一个新的进程(这里是SSH连接),`expect`等待特定的字符串出现(这里是"Password:"),然后`send`指令发送预设的密码,之后继续等待提示符,发送`ls -l`命令,最后`interact`允许用户...
这是一个小语言和Unix 的其他工具配合起来产生强大功能的经典例子。 本部分教程并不是有关Expect的实现,而是关于Expect语言本身的使用,这主要也是通过不同的脚本描述例子来体现。 其中的几个例子还例证了...
一个简单的`expect`脚本例子: ```tcl #!/usr/bin/expect spawn ssh user@hostname expect "password:" send "mypassword\n" expect "$ " send "ls -l\n" interact ``` 这个脚本会自动登录到远程主机,...
在expect的手册里面,还有一个独立的部分来解释这种复杂性。幸运的是:有一些很好的例子似乎阻止了这种抱怨。但是,这个复杂性很有可能在将来的版本中再度出现。为了增强可读性,在本文中,提供的脚本都假定双引号是...
expect5.45.3是一个基于TCL(Tool Command Language)语言的扩展库,它为用户提供了更丰富的命令集,特别是针对交互式进程控制的需求。本文将深入探讨expect的基本概念、功能及其在Linux环境中的应用。 首先,了解...
下面是一个简单的例子: ```tcl #!/usr/bin/tclsh set language "TCL" puts "Hello, $language!" puts {Hello, $language!} # 请求用户输入 puts "Enter a string: " gets stdin input puts "You said $input!" ``...
`expect`工具就是这样的一个例子,它允许用户编写脚本来自动响应命令行程序的交互式行为,大大简化了自动化任务的执行。而`TCL`(Tool Command Language)则是一种动态编程语言,常常被用于开发`expect`的脚本。在这...
Expect是一个Unix/Linux平台下的Tcl扩展,主要用于自动化控制和交互式程序,如telnet、ftp等。在LabVIEW环境下,我们可以通过NI的VISA(Virtual Instrument Software Architecture)库来模拟expect的功能,实现串口...
**Expect** 是一个免费且强大的编程工具,主要用于实现自动化与交互式的任务处理,尤其适用于那些原本需要人工干预的任务。它允许用户创建脚本来自动处理命令或程序的输入,而这些命令或程序通常期待从终端获取输入...
- **示例用法**:`spawn ftp localhost` 启动一个连接到本地主机的 FTP 客户端。 2. **`expect` 命令**: - **功能**:等待特定的输入或输出出现。 - **示例用法**:`expect "Password:"` 等待“Password:”提示...