首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >希望检查字符串或根本不输出

希望检查字符串或根本不输出
EN

Stack Overflow用户
提问于 2019-03-13 01:50:21
回答 1查看 582关注 0票数 4

我将以我第一次使用Expect作为开始,到目前为止,我非常喜欢它!如何为timeouteof以及输出消息或根本没有消息的帐户创建account?

我有一个从bash脚本触发的expect脚本。expect脚本仅用于通过ssh进入服务器并执行用户删除。如果删除不成功,将显示错误消息$username does not exist,后跟一个新的空白输入行。但是,如果操作成功,则不会返回任何消息,并且会立即跳转到新的空白输入行以执行下一个操作。

我发现了如何处理可能的输出的a similar stack post,尽管我在实现不返回任何输出的解决方案时遇到了问题。这是我迄今为止最好的尝试的一个片段:

代码语言:javascript
复制
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)返回空白,这是有意义的。

我想我对如何解决这个问题来处理这个特定的案例感到困惑。我没有权限更改错误处理,否则我只想让它返回某种类型的成功消息。打开任何关于如何处理这种情况的提示或替代方法。

EN

回答 1

Stack Overflow用户

发布于 2020-05-01 15:07:55

您可以让远程命令在成功时生成一些文本,以便在expect脚本中匹配该文本。

例如:

代码语言:javascript
复制
send "userdel $userdel_username && echo SUCCESS\r"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55127790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档