O código abaixo é adaptado de uma solução para "Usar o Expect em um script Bash para fornecer uma senha para um comando SSH", para passar argumentos para arquivos git push
. Não estou recebendo nenhuma exceção para passar o uname + pwd errado e, inversamente, passar os corretos não envia nada. Como isso pode ser corrigido?
git_push.sh
if (( $# == 2 ))
then
:
else
echo "expecting 'username pass', got $@"
exit 1
fi
user="$1"
pass="$2"
expect - <<EOF
spawn git push
expect 'User*'
send "$user\r"
expect 'Pass*'
send "$pass\r"
EOF
Terminal:
$ [path]/git_push.sh
spawn git push
Username for 'https://github.com': foo
Password for 'https://[email protected]':
Alternativamente (sem curingas):
spawn git push
expect "Username for 'https://github.com': "
send "$user\r"
expect "Password for 'https://[email protected]': "
send "$pass\r"
Para responder às perguntas esperadas :
aspas simples não têm nenhum significado especial em esperar, então você está procurando por aspas simples literais nos prompts User e Pass. Esses prompts não conterão aspas simples, portanto, o
expect
comando trava até que o tempo limite (padrão de 10 segundos) aconteça.depois de enviar a senha, você não espera a conclusão do push: o script expect fica sem comandos para ser executado e sai muito cedo, matando o processo git. Depois de qualquer
send
, você deveexpect
algo. Nesse caso, você espera que o comando gerado termine, indicado comexpect eof