zoukankan      html  css  js  c++  java
  • expect介绍和使用

    安装

    expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是:

    spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成, 退出.
    

    由于expect是基于tcl的, 所以需要确保系统中安装了tcl:

    # 检查是否安装了tcl:
    [root@localhost ~]# whereis tcl
    tcl: /usr/lib64/tcl8.5 /usr/include/tcl.h /usr/share/tcl8.5
    
    # 如果没有安装, 使用yum安装tcl和expect:
    [root@localhost ~]# yum install -y tcl
    [root@localhost ~]# yum install -y expect
    
    # 查看expect的安装路径:
    [root@localhost ~]# command -v expect
    /usr/bin/expect
    

    mac端安装expect

    下载tcl,expect

    配置tcl

    sudo cp tcl8.4.20-src.tar.gz /usr/local/ &&
    cd /usr/local/ &&
    sudo tar -zxvf tcl8.4.20-src.tar.gz &&
    cd tcl8.4.20 &&
    cd unix &&
    sudo ./configure --prefix=/usr/local/tcl --enable-shared &&
    sudo make &&
    sudo make install &&
    sudo cp ./tclUnixPort.h ../generic/
    

    安装expect

    sudo cp expect5.45.4.tar.gz /usr/local/ &&
    cd /usr/local/ &&
    sudo tar -zxvf expect5.45.4.tar.gz &&
    cd expect5.45.4 &&
    sudo ./configure --prefix=/usr/local/expect --with-tcl=/usr/local/tcl/lib --with-tclinclude=/usr/local/tcl8.4.20/generic &&
    sudo make &&
    sudo make install
    

    expect常用命令

    spawn	启动新的交互进程, 后面跟命令或者指定程序
    expect	从进程中接收信息, 如果匹配成功, 就执行expect后的动作
    send	向进程发送字符串
    send exp_send	用于发送指定的字符串信息
    exp_continue	在expect中多次匹配就需要用到
    send_user	用来打印输出 相当于shell中的echo
    interact	允许用户交互
    exit	退出expect脚本
    eof	expect执行结束, 退出
    set	定义变量
    puts	输出变量
    set timeout	设置超时时间
    

    参数选项

    • -c:执行脚本前先执行的命令,可多次使用。
    • -d:debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。
    • -D:启用交换调式器,可设一整数参数。
    • -f:从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。
    • -i:交互式输入命令,使用"exit"或"EOF"退出输入状态。
    • --:标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!/usr/bin/expect --
    • -v:显示expect版本信息。

    四个命令

    Expect中最关键的四个命令是send,expect,spawn,interact。

    send:用于向进程发送字符串
    expect:从进程接收字符串
    spawn:启动新的进程
    interact:允许用户交互
    

    参考

    expect(1)命令

    教你如何在Linux中通过expect工具实现脚本的自动交互

  • 相关阅读:
    A Summaryof JDBC
    Chinese Messy Code of String
    Use Spring @Scheduled To Achieve Timing Task
    关于拦截器实现日志存储到db的代码调试
    Java Web指导方向
    错误The request sent by the client was syntactically incorrect ()的解决
    jdbc实现简单的增删改查
    连接oracle jdbc
    关键路径求解算法
    <form> 标签的entype属性
  • 原文地址:https://www.cnblogs.com/hongdada/p/13712384.html
Copyright © 2011-2022 走看看