首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux expect详解

Linux expect详解 2018-07-11 分类:Linux Shell / 系统运维 / 编程开发 阅读(6670) 评论(0)  随处可见的expect 第一次见expect这个命令还是我第一次参加全量上线的时候...先抛出一个问题 现在有两台Linux主机A和B,如何从A主机ssh到B主机,然后在B主机上执行命令,如何使这个过程实现全程自动化?...interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化...比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact...expect的基本使用方法。

3.3K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    # Linux expect命令详解

    Linux系统中,expect 是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。...linux-expect.jpg 什么是Expect命令? expect 是一个用于自动化交互式进程的工具。它的主要功能是根据程序的输出模式(patterns)发送输入,从而实现自动化交互。...文件传输 使用 scp 进行文件传输时,如果需要密码,expect 可以自动提供密码,从而实现脚本化的文件传输。...使用技巧 模式和通配符 expect命令的模式可以包含通配符,如 *、? 、[...],以匹配可变的输出部分。 超时设置 使用 timeout 选项可以设置等待模式出现的最大时间,避免无限等待。...expect "$ " send "ls\n" expect "$ " send "exit\n" 脚本执行过程如下 _20231202223700.jpg 总结 expect命令是Linux系统中一个非常实用的工具

    38310

    expect java,Expect 使用详解「建议收藏」

    但是对于需要交互的场合则必须通过人工来干预,比如普通用户使用sudo命令时就需要我们手动输入密码;expect就是能够完成这种自动交互任务,而无需人的干预。...第2章 使用总结: 为什么先写总结,刚才是自己使用expect也纠结了一会,总结下,在结合下面的两个案例 1、需要注意先规划好expect 大概结构,实现效果,需要参数,路径、命令 2、写shell脚本注意...shell脚本中的变量需要对于expect中的变量. 2.1 使用例子 2.2 首先安装expect [shell] Centos OS yum 安装 yum install -y expect Ubuntu.../usr/bin/expect  #解释器,告诉操作系统,使用expect必须加。...set date [lindex $argv 0] # expect脚本可以接受从shell 脚本中传递过来的参数.可以使用n从0开始,分别表示第一个,第二个,第三个….参数 set password

    2.9K40

    Linux 下自动应答工具 Expect 使用指南

    Expect 恰恰填补了其中的一些裂痕,解决了在 Unix 环境中长期存在着的一些问题。 Expect 使用 Tcl 作为语言核心,不管程序是交互和还是非交互的,Expect 都能运用。...工具安装 源代码和下载地址都是由 Linux 软件基金会维护的(sourceforge) # 因为Expect需要Tcl编程语言的支持 $ sudo yum install -y gcc $ sudo...比如我们使用 spawn、send 和 expect 命令完成了 ftp 登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在 ftp 命令行状态,以便手动的执行后续命令,此时使用...简单使用 下面是一些简单的示例代码,主要帮助我们理解 expect使用。...欢迎投稿,投稿邮箱: editor@hi-linux.com。 ? ?

    1.7K21

    linux expect中的timeout设定

    在做日志分析工具时,发现在屏幕上拿到日志结果会有点慢,然后查了一下expect ssh timeout的设置,原来是这里有个默认时间的问题,所以整理一下: expect脚本我们都知道,首先spawn我们要执行的命令...,然后就给出一堆expect的屏幕输出,如果输出match了我们的expect的东西,我们就会send一个命令上去,模拟用户输入。...但是expect中等待命令的输出信息是有一个timeout的设定的,默认是10秒。这个特性是防止那些执行死机的命令的。...一旦到了这个timeout,还是没有屏幕输出的话,expect脚本中下面的代码就会执行。或者我们在expect脚本中如果定义了timeout的响应代码的话,这些代码就会被执行。 ...解决这样的问题非常简单,最简单的办法就是在expect脚本的开头定义:  set timeout -1 -- 没有timeout set timeout XX -- 设定具体的timeout时间(秒)

    3.8K20

    Linux expect实现自动登录脚本实例代码

    expect expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。...但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。...引言 目前在公司是一人一台虚拟机,大多数工作都要在虚拟机上完成,为此每天要执行很多次【ssh xxx@xxxxxx】指令登录虚拟机;有很多方式解决这个问题,如使用xshell、secureCRT等工具记录常用的连接.../usr/bin/expect spawn ssh xxx@xxxxxx expect "*password:" send "密码\r" interact 再将【....『xxx@xxxxxx’s password』符合匹配规则,触发【send】发送密码代替手动输入,完成登录,【interact】用户参与交互,此时已登录上了虚拟机; 使用expect还可以完成如:批量更新

    2.3K41

    Here Documents 结合expect使用--(1)

    here documents的语法为: cmd << delimiter # << 可以替换为 <<- , delimiter 也可以加上单引号来使用; Here Document...$1, 以及脚本中的其他变量等 使用expect 命令来解决自动交互问题是非常广泛的,expect有自己独特的语法,可以写expect脚本来解决复杂的交互问题;但是很多时候,我们会需要在shell中通过调用...expect脚本来解决交互问题;这时候就需要Here Documents 来帮忙; 在expect使用的时候,需要注意如下几点: expect ... send ......的语法结构使用的坑,对于下面的语法结构,有时候send命令并没有成功的执行,这是因为spawn产生的子进程而并不知道send已经结束 expect ... send ......也正是这个原因,所以expect一般在最后都会使用如下的结构: expect eof 看如下的例子: [root@localhost ~]# cat 1.sh #!

    40220

    Here Documents 结合expect使用--(2)

    我们已经知道expect可以帮我们自动完成“交互工作”,但是如果我们需要拿到 通过expect spawn的sub-process 所执行命令的结果,那么怎么做呢?...,我们也是没有办法知道的; expect给我们提供了一个特定的访问方法,那就是用 expect_out, 常用的有$expect_out(buffer) 或者 $expect_out(NUMBER,...; 要使用expect_out, 我们必须首先理解expect_out....如果没有匹配到,$expect_out(buffer)的结果是不会更新的; 这一段理解起来有一点拗口,不过对使用 expect_out非常重要,我们通过下面的例子进行验证: [root@instance..." #第一次进行expect, 匹配到就输入密码; send "$1\r" #输入密码; expect "~]" #第二次进行expect匹配

    88610

    Here Documents 结合expect使用--(3)

    在上一节中,我们学习了 expect_out,但是还没有演示到底如何使用expect_out来获得spawn出来的sub-process中执行的命令的结果,这里我们来演示如下: #我们这里来获取top命令的前...这时候,我们可以通过修改expect的表达式为: expect -re "~]" 来实现 expect -re "(.*)\r\n(.*)\r\n(.*)~]" set...当expect_out满的时候,会触发 full_buffer 的匹配,我们只需要对这个full_buffer的匹配进行处理,把expect_out的内容取出,然后再继续进行expect就可以了(通过exp_continue...send "$1\r" expect "~]" send "top -bn2\r" expect { #在此expect...#这里不建议采用分组的方式,因为分组不合适可能导致部分输出的内容丢失; append outcome \$expect_out(buffer) #注意这里的append, 不能使用set

    42020

    linux学习第六十九篇:分发系统介绍,expect脚本远程登录,expect脚本远程执行命令,expect脚本传递参数

    分发系统介绍 expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。...但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。...expect脚本远程登录 yum install -y expect 自动远程登录 #!...\r" expect "]*" send "echo 1212 > /tmp/12.txt\r" expect "]*" send "exit\r" expect “]*” 表示图中括号里的,表示当检测到这个符号时就执行我们要执行的命令...expect脚本传递参数 传递参数 #!

    1.6K110

    expect快速入门

    ---- expect脚本远程登录 以上简介中也提到了expect和shell类似,可以进行编程,接下来就实际的编写一些expect脚本来学习expect简单的使用方式。...语法中不允许行尾注释,注释需要另起一行,否则会报错 set是用来定义一个变量的,变量名后面跟的就是变量的值,不需要使用等于号来赋值,调用变量的方式和shell一样,也是使用$符号。...community-release-el7-8.noarch.rpm Test.java [root@localhost ~]# [root@localhost ~/expectFiles]# 执行多条命令,使用引号将命令括起来即可...可能有些人会想到使用set timeout来设置一个超时时间避免马上退出登录,实际上是无效的,避免这种马上退出登录的方式只能用expect eof或者interact。...bytes 86.00 bytes/sec total size is 5 speedup is 0.12 [root@localhost ~/expectFiles]# 文件的路径要写绝对路径,然后需要使用双引号引起来

    99720
    领券