我将以我第一次使用Expect作为开始,到目前为止,我非常喜欢它!如何为timeout、eof以及输出消息或根本没有消息的帐户创建account?
我有一个从bash脚本触发的expect脚本。expect脚本仅用于通过ssh进入服务器并执行用户删除。如果删除不成功,将显示错误消息$username does not exist,后跟一个新的空白输入行。但是,如果操作成功,则不会返回任何消息,并且会立即跳转到新的空白输入行以执行下一个操作。
我发现了如何处理可能的输出的a similar stack post,尽管我在实现不返回任何输出的解决方案时遇到了问题。这是我迄今为止最好的尝试的一个片段:
send "userdel $userdel_username\r"
expect {
timeout { send_user "timeout on deletion\n"; exit 1}
eof { puts "received eof\n"; exit 1}
-re "^.*(?=exist).*\$" { set userdel_fail 1;} # easy way to check for the error
-re "\$.*" { set userdel_fail 0;}
}
if {$userdel_fail == 1} {
send_user "$userdel_username does not exist"
} else {
send_user "$userdel_username deleted successfully"
}此解决方案始终命中expect块的最后一行,因为总会有输入。我尝试过完全删除-re "\$.*" { set userdel_fail 0;},但这会导致每次成功删除时都会命中timeout。如果我省略正则表达式来检查错误,并且只期望输入,我发现$expect_out(buffer)返回空白,这是有意义的。
我想我对如何解决这个问题来处理这个特定的案例感到困惑。我没有权限更改错误处理,否则我只想让它返回某种类型的成功消息。打开任何关于如何处理这种情况的提示或替代方法。
发布于 2020-05-01 15:07:55
您可以让远程命令在成功时生成一些文本,以便在expect脚本中匹配该文本。
例如:
send "userdel $userdel_username && echo SUCCESS\r"https://stackoverflow.com/questions/55127790
复制相似问题