• -bash: spawn: 未找到命令


    弯弯小道

    需要使用脚本来执行当前服务器和其他服务器进行数据互传,脚本要能够自动应答,网上查到资料可以使用诸如下面的脚本来实现

    #!/bin/expect -f  #which expect找到所在路径,添加到这里
    spawn scp -P 8822 ./nmap-7.92-1.x86_64.rpm root@192.168.1.*:/mnt
    expect {
            "(yes/no*)?" { send "yes\r";exp_continue }
            "*password:*" { send "ruijie1688\r" }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    我使用的是centos7.5系统,首先在命令行试了expect命令,可以正常使用;命令行输入spawn提示“-bash: spawn: 未找到命令”,第一感觉就是没有这个命令,需要自己去装一个。我的服务器系统不能直接联网安装,那么就准备去网上下载spawn安装包进行安装,这个思路有点问题,走了不少弯路…
    查了一些资料才发现spawn需要在expect环境下运行,环境中有了expect不需要再去安装spawn包

    了解下expect是什么?

    https://baike.baidu.com/item/expect/4598715
    在这里插入图片描述
    以下尝试运行命令

    [root@885003ed-49c8-5470-afb8-8c74ecf0760c ~]# expect 
    expect1.1> spawn                 #在expect环境下可以正常执行
    usage: spawn [spawn-args] program [program-args]
        while executing
    "spawn"
    expect1.2> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    expect脚本执行方式

    方式1:全路径执行

    /root/scritpt.sh
    
    • 1

    方式2:赋予执行权限后执行

    chmod +x scritpt.sh
    ./scritpt.sh
    
    • 1
    • 2

    方式2:使用expect运行

    expect scritpt.sh
    
    • 1

    expect中相关命令

    spawn:
        启动新的进程
      send:
        用于向进程发送字符串
      expect:
        从进程接收字符串
      interact:
        执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了
      expect eof
       与spawn对应,表示捕捉终端输出信息终止,结束交互。  
      exp_continue
        匹配多个字符串在执行动作后加此命令

    interact 与 expect eof的区别

    expect中的相关命令在之前的脚本中已有体现,对照脚本就可以知道用法,interact 与 expect eof的区别,可尝试运行下面的脚本执行,执行后查看下当前系统的IP地址就知道区别了,看看停留在哪里

    #!/bin/expect -f
    spawn ssh -p 9622 root@192.168.1.88
    expect "*password:*"
    send "admin688\r"
    interact
    
    • 1
    • 2
    • 3
    • 4
    • 5

    执行完以后停留在当前主机上

    #!/bin/expect -f
    spawn ssh -p 9622 root@192.168.1.88
    expect "*password:*"
    send "admin688\r"
    expect eof
    
    • 1
    • 2
    • 3
    • 4
    • 5

    执行完返回原来的位置

    上面的使用说明中如果有不好懂的地方,也可以参见下面的链接去学习 
    https://blog.csdn.net/wangzhicheng987/article/details/122689236
    https://blog.csdn.net/modi000/article/details/107115286/

  • 相关阅读:
    Python基于Django的汽车销售网站
    git常常用命令
    Viewpager2嵌套RecyclerView导致的滑动卡顿
    c# 反射专题研究
    openfeign服务调用实现
    03 Linux
    《C++ primer plus》第7章:函数——C++的编程模块
    【1024效率神器】还在Jenkins点点,快来体验Tekton的灵活自动化
    磁盘管理:磁盘调度算法
    [使用MogDB Operator在Kubernetes上部署MogDB集群(MogDB Stack)]
  • 原文地址:https://blog.csdn.net/wsuyixing/article/details/126541813