gpt4 book ai didi

shell - 期望检查字符串或根本没有输出

转载 作者:行者123 更新时间:2023-12-03 21:04:40 24 4
gpt4 key购买 nike

我将在我第一次使用 Expect 时以此作为序言,到目前为止我非常喜欢它!除了账号你是怎么做的timeout , eof , 是输出消息还是根本没有消息?

我有一个从 bash 脚本触发的期望脚本。 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"
}

这个解决方案总是命中期望块的最后一行,因为总会有一个输入。我试过忽略 -re "\$.*" { set userdel_fail 0;}完全,但这会导致每次成功删除 timeout .如果我省略正则表达式来检查错误而只期待输入,我会发现 $expect_out(buffer)返回空白,这是有道理的。

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

最佳答案

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

例如:

send "userdel $userdel_username && echo SUCCESS\r"

关于shell - 期望检查字符串或根本没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55127790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com