Eu tenho um script que faz login em um servidor. Independentemente do sucesso (ou seja, se a senha é válida ou não), o script será encerrado com o código de retorno 0 e o texto:
Error login failed.
Gostaria de tentar novamente o login se isso acontecer executando outro comando, mas por causa do código de retorno não consigo.
Se eu canalizar a saída para grep para 'Erro' para que eu possa executar um comando baseado nisso, a caixa de diálogo de login não aparecerá no terminal.
Existe alguma maneira de contornar isso?
Pseudocódigo, pois é para trabalho:
loginCmd && echo "$?"
username:
password:
Error login failed.
0
Atualizar
Tentei usar uma ideia de um comentarista, mas não consigo capturar o texto com 'Erro' pois essa linha ocorre após a conclusão do comando...
Aqui está o que realmente parece, com senha incorreta:
agent registration
username: xyz
password:
Error login failed.
Eu tentei isso:
result=$(loginCmd | tee /dev/tty)
grep -q 'Error' <<< "$result" &&
loginCmd
A string de erro é exibida após a conclusão do comando, portanto result
não a captura:
result=agent registration
Então acho que não há como capturar essa string?
Error login failed.
Alguma ideia?
Idealmente, em caso de falha de login, o script retornaria 1 ou teria algum tipo de mecanismo de nova tentativa, mas isso não acontece e não posso mudar isso, é um script da empresa e isso afeta apenas o terminal, não a GUI, que é o que os clientes usam .
Uma solução esperada pode ser assim
Misturar shell e expect é basicamente uma questão de invocar expect como qualquer outro comando. A parte complicada é garantir que a cotação esteja correta e que as variáveis expect não sejam inadvertidamente expandidas pelo shell
Este é um caso estranho e muito obrigado a todos que ajudaram sinceramente. Muitos teriam descartado isso apenas por ser estranho ou difícil de comunicar.
Parabéns a Ikkachu (sempre um bom contribuidor com minhas coisas) e G man.
Aqui está o que eu fiz:
Saída:
Também não atrapalhou acertar o login na primeira vez.
Eu adicionei o loop para que ele continue solicitando, não importa quantas vezes a senha seja digitada incorretamente.
Se alguém tiver alguma sugestão para melhorar isso estou aberto, aprendi muito aqui.