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

阻止expect在EOF上退出

问题:阻止expect在EOF上退出

答案:在使用expect自动化脚本时,有时候我们希望脚本在遇到EOF(End of File)时不退出,而是继续等待输入或执行其他操作。为了实现这个目标,可以使用以下方法:

  1. 使用expect的-e参数:可以在expect命令行中使用-e参数来指定一个正则表达式,当输入匹配该正则表达式时,expect将不会退出。例如,假设我们希望脚本在遇到"EOF"时不退出,可以使用以下命令:
代码语言:shell
复制

expect -c "expect -re {EOF} { }"

代码语言:txt
复制

这样,当输入中包含"EOF"时,expect将继续等待输入。

  1. 使用expect的timeout参数:可以使用expect的timeout参数来设置一个超时时间,当超过该时间后,expect将执行超时处理逻辑而不是退出。例如,假设我们希望脚本在遇到EOF后等待10秒钟再退出,可以使用以下命令:
代码语言:shell
复制

expect -c "set timeout 10; expect eof"

代码语言:txt
复制

这样,当遇到EOF时,expect将等待10秒钟后退出。

需要注意的是,以上方法只是阻止expect在EOF上退出的一种方式,具体使用哪种方式取决于实际需求和场景。另外,腾讯云提供了一系列云计算产品,可以根据具体需求选择适合的产品。具体产品介绍和链接地址请参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

expect 实现脚本的自动交互

expect 是建立 tcl 语言基础的一个自动化交互套件, 一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信。...可以将交互过程如:ssh 登录、ftp 登录、scp 复制文件等写在一个脚本,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。...expect eof expect eof 用以防止 spawn 进程程序执行完就直接退出的情况,有了它,程序会等待 spawn 进程程序结束再退出。...由 spawn 启动的程序结束的时候会产生一个 eof 标示,expect eof 会等待 spawn 进程程序的退出 eof 标示,一旦匹配到 eof 标识就什么也不做,什么也不做,没什么可做也就退出了...但是,expect 是有默认超时时间的 -10 秒, 如果程序执行时间超过10 秒或更久,显然 expect eof 会超时,程序会直接退出,解决办法就是设置 timeout。

98831

Linux命令(30)——scp命令

第二行:set timeout 5 用于设置expectexpect命令的等待时间为5秒,如果expect等待的值5秒内没有出现在标准输出,那么expect脚本继续执行。...效果跟用户手动终端上输入123456之后敲一个回车一样。 第六、七行实现的功能同第五六行,因为scp需要登录到两个主机实现文件的网络传输,所以这里是登录第二台主机需要输入的密码。...第八行:interact eof 表示expect脚本执行结束。执行完成上述命令后,此时Expect会把控制权交给控制台,这个时候就变回手工操作。...如果是使用ssh登录其它主机的话,需要保持交互状态,那么此时需要interact,如果没有这一句登录完成后会立刻退出,而不是留在远程终端上。...如果你只是登录过去执行一段命令就退出,可将其改为expect eof

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

    Expect Tcl 基础创建起来的并且还提供了一些 Tcl 所没有的命令: spawn命令激活一个 Unix 程序来进行交互式的运行 send命令向进程发送字符串 expect命令等待进程的某些字符串且支持正规表达式并能同时等待多个字符串...第一个行中,bogus 表示用户名是非法的,因此 passwd 会响应说:没有此用户。expect 退出时会返回 3,3 恰好就是第二个域。...最后一行中,^C 就是被切实的送给程序来验证程序是否恰当的退出。 2...." # 将运行结果存入到变量中,显示出来或者写到磁盘中 set results $expect_out(buffer) # 退出telnet会话,等待服务器的退出提示EOF..."ftp>" # 退出此次ftp会话,并等待服务器的退出提示EOF send "bye\r" expect eof [3] 自动登录 ssh #!

    1.7K21

    expect用法介绍

    "#" {send "hostname\r"} expect "#" {send "exit\r"} EOF Jetbrains全家桶1年46,售后保障稳定 脚本介绍: expect << EOF...EOF #表示里面的内容均由expect命令去执行 set timeout 6 #设置超时时间为6秒,下面的代码需6秒钟内完成,如果超过,则退出。...exit的指令,这里用来标识该expect退出了 2.2.稍复杂方式,shell脚本调用expect脚本,并传入参数(推荐) shell脚本 #!...注意:echo IP会报错 这种写法表示,如果终端出现yes,会执行yes里面语句;没有yes会往后面匹配 如果超时,通过send_error打印错误信息到终端,并退出脚本,退出码为1 expect...eof:spawn进程结束后会向expect发送eof,接收到eof代表该进程结束 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    3K31

    shell脚本快速入门之-----深入介绍Expect免交互

    免交互:自动化处理的前提条件 一、Expect概述 Expect是建立tc|基础.的一个工具,Expect 是用来进行自动化控制和测试的工具。主要解决shelI脚本中不可交互的问题。...没有空格则表示脚本名称 ; argv n有空格则代表下标 Expect脚本必须以interact或expect eof 结束,执行自动化任务通常expect eof就够了 expect eof等待结束标志...由spawn启动的命令结束时会产生一个eof标记,expect eof 即在等待这个标记 三、Expect语法 send命令不具备回车换行功能,一般要加 \r 或 \n 单一分支语法 expect...\r”} expect “ccc” {send “CCC\r”} 方式二:只要匹配了aaa或bbb或ccc中的任何一个,执行了了相应的send语句后将会退出expect语句 exoect { “aaa..."$password\r"} } expect "*]#" //匹配进入后的页面 send "exit\r" //触发退出 expect eof

    2.2K31

    玩转企业常见应用与服务系列(十):自动应答工具 expect 原理与实践

    Expect Tcl 基础创建起来的并且还提供了一些 Tcl 所没有的命令: spawn命令激活一个 Unix 程序来进行交互式的运行 send命令向进程发送字符串 expect命令等待进程的某些字符串且支持正规表达式并能同时等待多个字符串...第一个行中,bogus 表示用户名是非法的,因此 passwd 会响应说:没有此用户。expect 退出时会返回 3,3 恰好就是第二个域。...最后一行中,^C 就是被切实的送给程序来验证程序是否恰当的退出。..." # 将运行结果存入到变量中,显示出来或者写到磁盘中 set results $expect_out(buffer) # 退出telnet会话,等待服务器的退出提示EOF..."ftp>" # 退出此次ftp会话,并等待服务器的退出提示EOF send "bye\r" expect eof 自动登录 ssh #!

    20210

    Linux之expect工具免交互式shell脚本执行

    Linux之expect工具是一个根据脚本与其他交互式程序进行交互。通过脚本中设定期望值和响应值进行交互操作。主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。...以SSH KEY 生成以及发送到远程服务器为例简单介绍下expect工具 expect 启用选项: -c执行脚本前先执行的命令,可多次使用-ddebug模式,可以在运行时输出一些诊断信息,与脚本开始处使用...-i交互式输入命令,使用"exit"或"EOF"退出输入状态--标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!...需要进入到expect环境才可以执行,不能直接在shell环境下直接执行set timeout n设置超时时间,表示该脚本代码需n秒钟内完成,如果超过,则退出。...exit退出expect脚本expect eofspawn进程结束后会向expect发送eof,接收到eof代表该进程结束interact执行完代码后保持交互状态,将控制权交给用户。

    1.1K10

    expect快速入门

    expect简介 expect是一个自动化交互式应用程序的工具,所以expect可以用来处理交互的命令。借助expect,我们可以将交互过程写在一个脚本,使之自动化完成。...与interact相对的就是expect eofexpect eof会在登录后,停留登录状态1-2秒后才退出登录。...: [root@localhost ~/expectFiles]# 从结果可以看到,还没来得及执行rsync命令就退出来了,所以在这种登录后需要执行命令的expect脚本中一定要加上expect eof...或者interact,不然你需要远程执行的命令就会来不及被执行,这就是加不加expect eof或者interact的区别。...可能有些人会想到使用set timeout来设置一个超时时间避免马上退出登录,实际是无效的,避免这种马上退出登录的方式只能用expect eof或者interact。

    99720

    Linux expect 自动交互脚本用法

    expect自动交互流程: spawn启动指定进程 expect获取指定关键字 send向指定程序发送指定字符 执行完成退出. 注意该脚本能够执行的前提是安装了 expect。...expect中多次匹配就需要用到 send_user 用来打印输出 相当于shell中的echo exit 退出expect脚本 eof...expect执行结束 退出 set 定义变量 puts 输出变量 set timeout 设置超时时间 使用示例 下面以我最近使用的脚本来一行行进行分析..."${user}@${ip}'s password:" # 发送内容pass,类似于我们使用时输入密码,将该步骤交给脚本完成 send "${pass}\r" # 执行完成后自动退出 expect eof...见谅~ 免交互expect eof和interact的区别 二者都是结束符号 expect eof :等待执行结束,用于执行自动化任务,无需后续继续交互,直接完成并退出

    1.7K30

    expect命令linux下实现批量ssh免密

    有时候我们需要批量发送ssh命令给服务器,但是有可能有些服务器是新加入的,还没有配置ssh免密,这个时候就会提示我们输入yes/no 或者password等,expect脚本命令就是用于提示这些的时候...对应的我们可以使用expect eof,替代interact代表等待spawn结束后退出spawn进程结束后会向expect发送eof) 多分支语法 上面的这种expect属于单一分支模式,代表就匹配这一种...expect eof; " 上面的shell功能和expect脚本实现的功能一致,都是通过ssh登录进去后输入,ls -la 命令 set timeout -1 设置超时时间 expect 后面需要加上...第15行代表ls -la 命令结束后发送一个退出命令,一般需要加上,防止阻塞 expect eof 匹配spawn结束 ssh批量免密demo #!...eof; " } for server in $SERVERS do sshcopyid $server done 以上就是本次介绍的expect命令linux下实现批量ssh免密的全部过程

    2.2K21

    Jenkins结合shell+expect脚本完成线上环境自动构建部署

    由于jenkins部署在内网,生产环境公网,所以中间需要一个安装包转移的过程,将内网的安装包copy到远程公网对应位置,可采用scp命令,同样也可以采用上传到远程服务器,公网服务器get下来,笔者采用是...采用scp存在一个问题,此命令会与人产生交互,无法shell中自动完成,此时需要借助另外一个工具expect(Tcl语言的另一个衍生版),上篇文章已经介绍到【如何编写无须人工干预的shell脚本】 脚本如下...expect "100%" expect eof spawn ssh -l root 118.36.23.113 -p 10000 #远程登陆 expect "*assword:" { send "$...expect "*#" send "sh server-restart.sh \r" #远程的启动脚本 expect "*#" #send "exit\r" -- 希望执行完sh脚本,退出远程服务。...这么做导致war包部署时异常,这里要注释掉,统一交由jenkins的job来终结 expect "100%" expect eof interact server-restart.sh脚本内部就如之前一篇

    75010

    expect自动交互脚本:简化你的自动化任务

    安装 expect开始之前,首先需要确保你的系统中已安装 expect。.../deploy.sh\r"expect "#"# 读取到文件结束符,表示 expect 执行结束expect eof# 进入交互模式,用户将停留在远程服务器interact这段脚本简洁直观地展示了如何自动登录服务器并执行简单命令...-re "mysql>" { exit }expect eof测试一些其他的参数#!..."\003" # 如果想向远端发送 Ctrl-C 结束远端进程exit # 退出#interactexpect eof支持登录多台服务器的脚本管理多台服务器时,可以通过编写一个脚本来选择性登录不同的服务器...实际expect 的应用场景非常丰富,掌握了这个工具,你将能够大大提升你的工作效率。希望这篇文章能对你有所帮助!

    20900

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

    所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。 expect脚本远程登录 yum install -y expect 自动远程登录 #!...passwd\r" } #当在远程登录时出现password:时自动输入密码 } interact #作用:表示需要停留在远程的机器,不需要退,如果不加就会退出来 #如果是 expect...eof 就会在机器停留一两秒后退出来 ?...expect脚本远程执行命令 自动远程登录后,执行命令并退出 #!...远程登录机器执行命令后退出 ? 远程的机器执行命令后创建的文本和内容 ? expect脚本传递参数 传递参数 #!

    1.6K110

    Linux expect用法介绍

    1.expect是linux中一个交互命令,一般 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect...获取一命令执行后的返回信息,如果匹配成功 则执行后续操作 spawn 交互程序开始后面跟命令 set 定义变量 puts...输出变量 set timeout 设置超时时间 send    用于发送字符串或者命令 exit 退出expect脚本 eof...expect执行结束 退出 interact 结束 2.实例 需求1描述:没有ssh密钥认证时,scp远程复制到目标主机需要每次输入密码,这里使用expect免去手动输入密码的操作..."\*assword\*" #发送密码 send "Password\r" #结束交互 interact 需求1描述:没有ssh密钥认证时,sftp到远程主机,切换到指定目录,并将目录下所有文件下载到本地

    5K20

    MHA搭建之ssh互信打通脚本

    MHA搭建之ssh互信打通脚本 MySQL搭建MHA高可用架构的时候,需要打通master、slave、以及mha manager之间的ssh互信,通常情况下,运维人员需要手动打通ssh互信,自动化构建的过程中很不方便...这里分享一个这两天改过的脚本,来打通服务器之间的ssh互信关系,脚本的主要步骤分为如下几步: 1、使用跳板机源端,利用ssh-keygen命令生成源端服务器的公钥和私钥 2、使用跳板机目标端,利用ssh-keygen...<< EOF spawn ssh -p $ssh_port $src_username@$src_host ssh-keygen -t rsa while 1 { expect...Keygen_dst() { expect << EOF spawn ssh -p $ssh_port $dst_username@$dst_host ssh-keygen -t rsa while...interact命令的,interact命令主要用于退出自动化,进入人工交互;

    1.1K10

    详解自动交互命令expect,免去手动输入!

    -->send向指定进程发送指定字符-->进程执行完毕,退出结束 相关使用命令 #1.spawn命令 expect自动交互程序执行的过程中,spawn命令是一开始就需要使用的命令。...} "*password" {exp_send "guoke123\r"} } expect eof #参数说明 exp_send和send类似。...what hao #6.exit命令 exit命令的功能类似于shell中的exit,即直接退出expect脚本,除了最基本的退出脚本功能之外,还可以利用这个命令对脚本做一些关闭前的清理和提示等工作 expect...#2.特殊变量 expect里也有与shell脚本里的0、!...expect中的特特殊关键字用于匹配过程,代表某些特殊的含义或状态,一般只用于expect命令中而不能在expect命令单独使用 #1.eof关键字 eof(end-of-file文件结尾)关键字用于匹配结束符

    4.1K31

    shell 常用命令

    shell 常用命令 expect expect 命令是用来实现自动化交互通信的,比如当你脚本中通过某些命令登录、连接、上传、下载等和远程服务器的交互时,可能需要让你输入一些账号、密码等信息 如果这个过程是人工手动终端执行的...expect1.1> 基本命令 spawn:用于启动一个子进程来执行后续命令 expect eof:用来退出 spawn 启动的子进程,返回到当前进程环境,与 spawn 成对出现 expect:用于接收进程的输出信息..."password" send "$password\n" expect eof exit 0 在当前 shell 里执行: /usr/bin/expect login.sh "22" "root"...你不用图形界面的操作也行 使用 ssh -p 22 root@ip 很简单,指定端口,登录用户,ip 地址就可以了,然后再手动输入密码 如果不想每次登录都输入密码,那么需要配置 ssh 私钥、公钥,将公钥放置服务器...,返回主进程,继续处理往下命令 expect eof # 另起进程执行 ssh 连接项目运行的服务器 spawn ssh -p $port -o "StrictHostKeyChecking no"

    1.4K21
    领券