我正在编写一个自动化脚本,该脚本登录服务器并找到应用程序ID。我正在使用Expect脚本,以便在出现提示后登录到他的每个服务器。登录时,有一堵默认文本(安全通知等),我尝试在登录服务器后存储命令的输出,但这样做没有任何运气。任何建议表示赞赏
这是针对Linux服务器的。我试过使用$ expect_out(buffer),但是在开始时没有屏蔽登录消息的运气。
https://gitlab.xx.local/api/v4/projects/<project-x-id>/archive
我收到的输出是登录消息的子字符串。
答案 0 :(得分:0)
您的问题有两个:
expect
命令之后,您没有send
响应。否则,您尝试从响应中提取ID时,响应实际上可能不会被处理。expect_out(buffer)
变量可以很容易地包含所需文本以外的其他文本。您需要对匹配进行选择,例如,使用正则表达式和使用-re
选项进行`expect。我猜测解决方法是将第三行更改为:
expect -re {(\d+)\n} {
set id $expect_out(1,string)
}
记住,每当您无法弄清预期脚本为什么出错时,就打开调试模式。它通常可以准确说明(立即)问题是什么,这对您有很大帮助……
答案 1 :(得分:0)
我找到了解决方案。为了从命令中获得响应,我使用了以下代码:
expect "$prompt"
set cmd "ps -ef|grep java|grep -i 'tomcat' | cut -f1 -d' '\r"
send -- $cmd
expect eof
expect -re "$ ps -ef | grep java | grep -i 'tomcat' | cut -f1 -d' '\r\n(.*)\r" {set output $expect_out(1,string)}
我将期望值设置为包含命令(带有提示符),并使其继续到期望输出的下一行。然后,将变量$ output设置为$ expect_out(1,string),它接受除了期望值以外的所有内容,因此将命令输出给了我。