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

如何在Expect脚本中返回生成的进程退出代码?

在Expect脚本中,可以使用spawn命令启动一个子进程,并通过expect命令匹配子进程的输出,从而实现与子进程的交互。当子进程退出时,可以通过捕获spawn命令的返回值来获取子进程的退出代码。

下面是一个示例的Expect脚本,演示如何返回生成的进程退出代码:

代码语言:expect
复制
#!/usr/bin/expect

set timeout 10

spawn ./your_script.sh

expect {
    eof {
        set exit_code [wait -i $spawn_id]
        puts "子进程退出代码:[lindex $exit_code 3]"
        exit [lindex $exit_code 3]
    }
    timeout {
        puts "子进程超时退出"
        exit 1
    }
}

在上述脚本中,首先使用spawn命令启动一个名为your_script.sh的子进程。然后,使用expect命令匹配子进程的输出。当子进程退出时,expect命令会捕获到eof(文件结束)事件。在eof事件处理块中,使用wait命令获取子进程的退出信息,其中[lindex $exit_code 3]表示获取退出代码。最后,使用exit命令返回子进程的退出代码。

这种方式可以适用于各种类型的子进程,无论是执行命令、运行脚本还是其他可执行文件。根据具体的需求,可以在脚本中添加更多的逻辑来处理不同的情况。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

何在Bash中等待多个子进程完成,并且当其中任何一个子进程以非零退出状态结束时,使主进程返回一个非零退出码?

问题 如何在 Bash 脚本中等待该脚本启动多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本返回一个非零退出码? 简单脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊 sleep 函数,它将睡眠秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它返回代码...echo "num_procs = $num_procs" # 作为子进程运行命令并把 pid 存储到数组 pids=() # bash数组 for (( i=0; i<"$num_procs"

6700

Linux expect详解

说白了,expect就是一套用来实现自动交互功能软件。 在实际工作,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行指令,而这些输入都需要人为手工进行。...实用代码分析 上面对expect进行了总结,特别是对一些常用命令进行了详细说明。下面就通过一些常用expect脚本来具体说明如何使用expect来完成日常一些工作。 #!...”字符串,如果有则立即返回;否则就等待一段时间后返回,这里等待时长就是前面设置30秒; send "$password\r":当匹配到对应输出结果时,就发送密码到打开ssh进程,执行交互动作;...这就是对上述这段简单简单脚本分析,在上述示例,涉及到expect中一个非常重要概念——模式-动作;即上述expect "*password*" {send "$password\r"}这句代码表达出来含义...传参 很多时候,我们需要传递参数到脚本,现在通过下面这段代码来看看如何在expect中使用参数: #!

3.3K50

shell 常用命令

shell 常用命令 expect expect 命令是用来实现自动化交互通信,比如当你在脚本通过某些命令登录、连接、上传、下载等和远程服务器交互时,可能需要让你输入一些账号、密码等信息 如果这个过程是人工手动在终端执行...expect1.1> 基本命令 spawn:用于启动一个子进程来执行后续命令 expect eof:用来退出 spawn 启动进程返回到当前进程环境,与 spawn 成对出现 expect:用于接收进程输出信息...expect 需要复用匹配 send_user:用于打印输出,相当于 echo interact:结束自动化交互,转入人工交互,如果脚本是纯自动化场景,那么不应该有这条命令,脚本执行结束则退出。...本地开发后端 spring-boot 项目,然后有一台专门 jenkins 服务器,自动或手动触发构建 jenkins 构建时,会自动去拉取代码,然后执行 package.sh 打包脚本生成 jar...打包 (mvn clean packge -P $environment) # 如果 mvn 命令执行异常,将会返回非0,终止脚本,异常退出 if [ $?

1.3K21

Linux expect 自动交互脚本用法

expect自动交互流程: spawn启动指定进程 expect获取指定关键字 send向指定程序发送指定字符 执行完成退出. 注意该脚本能够执行前提是安装了 expect。...在expect多次匹配就需要用到 send_user 用来打印输出 相当于shellecho exit 退出expect脚本 eof...expect执行结束 退出 set 定义变量 puts 输出变量 set timeout 设置超时时间 使用示例 下面以我最近使用脚本来一行行进行分析...,如果有则立即返回,否则就等待一段时间(timeout)后返回 expect "${user}@${ip}'s password:" # 发送内容pass,类似于我们使用时输入密码,将该步骤交给脚本完成...send "${pass}\r" # 执行完成后自动退出 expect eof 结合以上,想必读者对这个命令应该也有所了解了,照葫芦画瓢,可以实现很多场景,ssh、ftp等,可以大大提高我们效率

1.7K30

shell expect权威指南和实战

最后脚本等待命令退出(chsh结束),一旦接收到标识子进程已经结束eof字符,expect脚本也就退出结束。...注意: (1)该脚本没有使用spawn命令。 (2)该expect脚本会与任何调用该脚本进程交互。 (3)如果该脚本名为prompt,那么它可以用在任何C风格shell。...#(4)lappend命令使用保存每个spawn进程进程ID号内部变量$spawn_id在变量procs构造了一个进程ID号列表。...代码刚开始还设定了timeout时间为10秒,如果在执行scp任务时遇到了代码没有指定异常,则在等待10秒后该脚本执行会自动终止。...expect代码捕获(yes/no)内容用于完成第一次访问目标主机时保存密钥操作。有了这一句,scp任务减少了中断情况。

1.7K21

expect用法介绍

一、概念 Expect是UNIX系统中用来实现自动化控制和测试软件工具,作为Tcl脚本语言一个扩展应用在交互式软件Telnet、FTP、SSH等。...执行shell脚本,需要从终端得到输入时(ssh root@192.168.1.2),Expect可以根据提示,模拟标准输入来实现交互脚本执行 可以把shell和expect理解为两种不同脚本语言,...EOF #表示里面的内容均由expect命令去执行 set timeout 6 #设置超时时间为6秒,下面的代码需在6秒钟内完成,如果超过,则退出。...对话框 expect "password:" #期望终端出现包含"password:"字段。如果没有出现,则不执行后面的代码,会卡在此处,达到超时时间退出。...exit指令,这里用来标识该expect退出了 2.2.稍复杂方式,shell脚本调用expect脚本,并传入参数(推荐) shell脚本 #!

2.9K31

expect 实现脚本自动交互

可以将交互过程:ssh 登录、ftp 登录、scp 复制文件等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作环境,可以大大提高系统管理人员工作效率。...# send 和 send_user:send 会将 expect 脚本需要信息发送给 spawn 启动那个进程,而 send_user 只是回显用户发出信息,类似于 shell echo...expect eof expect eof 用以防止 spawn 进程程序执行完就直接退出情况,有了它,程序会等待 spawn 进程程序结束再退出。.../xxx.sh 才能执行脚本成功,下面的自动登录 ssh 实例代码就是封装成函数形式。...参考资料 expect自动交互详解 Ubuntu使用Spawn和expect实现ssh自动登陆 Linux通过expect工具实现脚本自动交互

92531

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

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

1.1K10

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

在第一个行,bogus 表示用户名是非法,因此 passwd 会响应说:没有此用户。expect退出时会返回 3,3 恰好就是第二个域。...在最后一行,^C 就是被切实送给程序来验证程序是否恰当退出。 2....基础知识 主要介绍常见 4 个命令使用方式 我们知道,send 命令用于发送信息到进程expect 命令则是根据进程反馈信息进行对应逻辑交互。...编号 命令 作用 1 send send 命令接收一个字符串并将该参数发送到进程 2 expect expect 通常用来等待进程反馈再发送对应交互命令 3 spawn spawn 命令用来启动新进程..." # 将运行结果存入到变量,显示出来或者写到磁盘 set results $expect_out(buffer) # 退出telnet会话,等待服务器退出提示EOF

1.6K21

Cypress web自动化34-cy.exec()执行系统命令

将与现有系统环境变量合并 failOnNonZeroExit true 如果命令以非零代码退出是否失败 timeout execTimeout 超时时间默认60秒 返回结果 cy.exec() 执行之后...,结果返回以下属性对象: code code为0 是成功 stdout 执行系统命令行输出内容 stderr 报错内容 使用示例 cy.exec() 为运行任意系统命令提供了一个退出功能,...适用于以下场景: 运行构建脚本 操作测试数据库 启动过程 杀死进程 运行构建命令 cy.exec('npm run build').then((result) => { // 生成result对象...20s没执行完成,那么就会失败 cy.exec('npm run build', { timeout: 20000 }) 选择在非零退出时不失败,并在代码和stderr上声明 cy.exec('man...cy.exec() 不支持不退出命令,例如: 开始一个 rails server 运行监听任务 需要手动中断以停止任何进程 命令必须在内退出,execTimeout 否则Cypress会杀死命令进程并使当前测试失败

93020

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

在第一个行,bogus 表示用户名是非法,因此 passwd 会响应说:没有此用户。expect退出时会返回 3,3 恰好就是第二个域。...在最后一行,^C 就是被切实送给程序来验证程序是否恰当退出。...$ sudo make && make install 基础知识 主要介绍常见 4 个命令使用方式 我们知道,send 命令用于发送信息到进程expect 命令则是根据进程反馈信息进行对应逻辑交互...send #send 命令接收一个字符串并将该参数发送到进程 expect #expect 通常用来等待进程反馈再发送对应交互命令 spawn #spawn 命令用来启动新进程 interact..." # 将运行结果存入到变量,显示出来或者写到磁盘 set results $expect_out(buffer) # 退出telnet会话,等待服务器退出提示EOF

16610

Shell脚本编程_shell简单脚本

,在脚本代码调用通过命令行传递给脚本参数。...返回最后一个后台进程进程号 用户可以在脚本中使用以下命令自定义退出状态码: exit [n] #脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字 #如果未给脚本指定退出状态码...函数执行结果返回值: 使用 echo 等命令进行输出 函数体调用命令输出结果 函数退出状态码: 默认取决于函数执行最后一条命令退出状态码 自定义退出状态码,其格式为: return 从函数返回...  expect 主要应用于自动化交互式操作场景,借助 expect 处理交互命令,可以将交互过程:ssh 登录,ftp 登录等写在一个脚本上,使之自动完成。...-d:可以输出调试信息 expect 相关命令: spawn 启动新进程 expect进程接收字符串 send 用于向进程发送字符串 interact 允许用户交互 exp_continue

7.8K10

MHA搭建之ssh互信打通脚本

MHA搭建之ssh互信打通脚本 在MySQL搭建MHA高可用架构时候,需要打通master、slave、以及mha manager之间ssh互信,通常情况下,运维人员需要手动打通ssh互信,在自动化构建过程很不方便...这里分享一个这两天改过脚本,来打通服务器之间ssh互信关系,脚本主要步骤分为如下几步: 1、使用跳板机在源端,利用ssh-keygen命令生成源端服务器公钥和私钥 2、使用跳板机在目标端,利用ssh-keygen...文件,并修改.ssh文件夹属性为700,,修改authorized_keys文件属性为600 按照上面的步骤,我们可以单向打通源端到目标端ssh,借助shell脚本进行源端和目标端交换,就可以实现...,常见参数说明如下: 命令 作用 send 用于向进程发送字符串 expect进程接收字符串 spawn 启动新进程 interact...允许用户交互 其中,send命令接收一个字符串参数,并将该参数发送到进程expect通常用来等待一个进程反馈,我们根据进程反馈,再发送对应交互命令; spawn命令用来启动新进程

1.1K10

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

-->send向指定进程发送指定字符-->进程执行完毕,退出结束 相关使用命令 #1.spawn命令 在expect自动交互程序执行过程,spawn命令是一开始就需要使用命令。...root@192.168.1.1 uptime expect "*password" {send *123456\r"} #提示:上述命令不能直接在linux命令行执行,需要放入expect脚本执行...expect标量send slow相关联 #4.exp_continue命令 作用是让expect程序继续匹配意思 # expect { "yes/no" {exp_send "yes...what hao #6.exit命令 exit命令功能类似于shellexit,即直接退出expect脚本,除了最基本退出脚本功能之外,还可以利用这个命令对脚本做一些关闭前清理和提示等工作 expect...test.log 1 192.168.1.1 3 #传参总数 test2.exp #脚本名字 expectif条件语句 #语法 if {条件表达式} { 指令 } 或 if {条件表达式

4K31

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

免交互:自动化处理前提条件 一、Expect概述 Expect是建立在tc|基础.上一个工具,Expect 是用来进行自动化控制和测试工具。主要解决shelI脚本不可交互问题。...yes 自动发送指令 send:向进程发送字符串,用于模拟用户输入 不能自动回车换行,一般要加\r(回车) expect expect一个内部命令,判断上次输出结果里是否包含指定字符串...,如果有则立即返回,否则就等待超时时间后返回 只能捕捉由spawn启动进程输出 spawn:启动进程,并跟踪后续交互信息 **interact:**执行完成后保存交互状态,把控制权交给控制台...Expect脚本可以接受从bash传递参数,可以使用 [lindex argv n] 获得,n从0开始,分别表示第一个1,第二个2,第三个3……参数 argvn没有空格则表示脚本名称 ; argv...\r”} expect “ccc” {send “CCC\r”} 方式二:只要匹配了aaa或bbb或ccc任何一个,执行了了相应send语句后将会退出expect语句 exoect { “aaa

2K31

Linux实现自动登录实例讲解

使用expect实现自动登录脚本,网上有很多,可是都没有一个明白说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短例子说明脚本原理。 脚本代码如下: #!.../usr/bin/expect] 这一行告诉操作系统脚本代码使用那一个shell来执行。这里expect其实和linux下bash、windows下cmd是一类东西。...好比windows里dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 可执行文件。 它主要功能是给ssh运行进程加个壳,用来传递交互指令。...这个命令意思是判断上次输出结果里是否包含“password:”字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置30秒 5....如果没有这一句登录完成后会退出,而不是留在远程终端上。 以上就是本次介绍关于Linux实现自动登录相关实例内容,感谢大家学习和对ZaLou.Cn支持。

1.5K20

# Linux expect命令详解

在Linux系统expect 是一款非常有用工具,它允许用户自动化与需要用户输入进行交互程序。本文将深入探讨expect命令基本语法、使用方法以及一些最佳实践。...处理交互式命令行工具 与一些需要用户输入命令行工具(配置工具、安装程序等)交互时,expect 可以自动完成交互过程。...在这里,脚本期望子进程输出包含 "password" 字符串。...expect eof': 这表示脚本会等待子进程结束(eof 表示 end of file)。一旦子进程结束,整个 expect 脚本也就结束了。...使用技巧 模式和通配符 expect命令模式可以包含通配符, *、? 、[...],以匹配可变输出部分。 超时设置 使用 timeout 选项可以设置等待模式出现最大时间,避免无限等待。

31010

shell脚本实例精讲_shell脚本编程实例

如果用户 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默 认 123456 作为默认密码。 #!.../bin/bash read ‐p "请输入用户名: " user #使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本退出码为 2 #没有输入用户名脚本退出后,...,num2 永远存中间值,num3 永远存最大值 #如果输入不是这样顺序,则改变数存储顺序,:可以将 num1 和 num2 值对调 tmp=0 #如果 num1 大于 num2,就把 num1...$i is down" fi let i++ done 编写脚本测试 192.168.4.0/24 整个网段哪些主机处于开机状态,哪些主机处于关机 状态(多进程版)... 查找 Linux 系统僵尸进程 提示用户输入年份后测试判断是否为闰年 生成随机密码(urandom 版本) 生成随机密码(字串截取版本) 显示本机 Linux

1.2K10

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

但当不能使用密钥验证时候,我们就没有办法了。所以,这时候只要知道对方机器账号和密码就可以通过expect脚本实现登录和远程命令。.../login.sh】配置别名alias,或移动到可执行目录,即可实现【login】一键登录; expect是一个处理交互指令,通过expect我们可以把交互过程写到Shell脚本里以实现一些自动化操作...~ expect有四个核心指令: spawn:启动新进程,后跟新进程要执行指令; expect:指定要监听字符串,如果spawn进程返回了匹配字符串(标准输入提示信息),则触发send; send...:发送指定字符串到spawn进程,代替标准输入; interact:用户参与交互; 对于login.sh执行过程为: 【spawn】启动一个新进程执行ssh登录指令,【expect】监听到标准输入提示信息...git代码库、自动登录FTP等功能等~ 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn支持。

2.3K41
领券