我有一个登录服务器的脚本。无论是否成功(即密码是否有效),脚本都会以返回代码 0 退出,并显示以下文本:
Error login failed.
如果发生这种情况,我希望通过运行另一个命令来重试登录,但由于返回代码,我无法做到。
如果我将输出通过管道传输到 grep 以获取“错误”,以便我可以基于此执行命令,那么登录对话框就不会显示在终端中。
有没有办法解决?
这是用于工作的伪代码:
loginCmd && echo "$?"
username:
password:
Error login failed.
0
更新
我尝试使用评论员的想法,但我无法捕捉带有“错误”的文本,因为该行出现在命令完成后......
密码错误时,实际情况如下:
agent registration
username: xyz
password:
Error login failed.
我尝试过这个:
result=$(loginCmd | tee /dev/tty)
grep -q 'Error' <<< "$result" &&
loginCmd
错误字符串在命令完成后输出,因此result
不会捕获它:
result=agent registration
所以我猜没有办法捕获这个字符串?
Error login failed.
有任何想法吗?
理想情况下,登录失败时脚本会返回 1,或者具有某种重试机制,但事实并非如此,而且我无法更改这一点,这是一个公司脚本,它只会影响终端,而不会影响客户使用的 GUI。
预期解决方案可能如下所示
混合使用 shell 和 expect 基本上就是像调用其他命令一样调用 expect。棘手的部分是确保引用正确,并且 expect 变量不会被 shell 无意中扩展
这是一个奇怪的案例,非常感谢所有真诚提供帮助的人。很多人会因为这件事很奇怪或难以沟通而放弃它。
感谢 Ikkachu (一直对我的作品做出很大贡献) 和 G man。
这是我所做的:
输出:
第一次登录时也没有发生错误。
我添加了循环,这样无论密码输入错误多少次,它都会不断提示。
如果有人有任何建议可以使这个变得更好,我愿意接受,我在这里学到了很多东西。