expect - 使用 expect 来检查命令输出是否包含一个单词(否则错误)
问题描述
我想检查命令输出中是否有接口:
ip a
如果没有,那么我想停止执行。我试过这段代码:
#!/usr/bin/expect -f
spawn bash
set spi_bash $spawn_id
send "ip a\r"
expect {
-re "docker0" {puts "docker0 is there\n"; exp_continue }
timeout {puts "no docker0\n"; exit 1}
}
exit
但exp_continue
继续timeout
案例。
解决方案
我建议你不需要对此期望:
set output [exec ip a]
if {[string first docker0 $output] != -1} {
puts "no docker0"
}
但是如果这是一个更大的期望程序的一部分,你可以写
spawn bash
set spi_bash $spawn_id
# a regex matching your prompt: a dollar sign, a space, and end of input
# adjust as required
set prompt {\$ $}
send "ip a\r"
set has_docker false
expect {
-re "docker0" {set has_docker true; exp_continue}
-re $prompt
}
send "exit\r"
expect eof
if {$has_docker}
puts "docker0 is there"
} else {
puts "no docker0"
}
exit [expr {!$has_docker}]
推荐阅读
- javascript - Java 脚本文件阅读器 我怎样才能使它成为一个多文件阅读器?
- spring - 服务器发送事件错误:Angular5 + Spring App 中的 406(不可接受)
- mysql - 缺少数据库连接 cakephp
- laravel - 在 laravel 5.7 中显示数据透视表中的数据
- oracle - Oracle 12,已弃用 utl_dbws
- javascript - 使用其他脚本后 Javascript 脚本不运行
- java - 计算 20 名工人平均工资的 Java 程序
- python - 根据 df1 中的 3 个值匹配 df2 中的 3 个值填充数据框中的新列
- powershell - Powershell 函数返回值已更改
- swift - 如何在 iOS 中使用通用链接打开内部页面