![Analise a saída de uma variável expect e use-a em um script bash](https://rvso.com/image/170283/Analise%20a%20sa%C3%ADda%20de%20uma%20vari%C3%A1vel%20expect%20e%20use-a%20em%20um%20script%20bash.png)
Eu tenho um script bash que usa expect dentro do script bash. Este script bash solicitará uma senha dentro da parte esperada do script e retornará alguma saída. Quero pegar essa saída e analisá-la para que ela exiba apenas uma parte da saída para mim e a armazene em uma variável que o script bash normal possa usar. Meu roteiro é:
#!/bin/sh
output=$(
/usr/bin/expect << EOF
spawn -noecho generate passcode -a 123456789
expect "passphrase:" { send "password\n" }
expect eof
EOF
#)
) | awk '/^ [a-zA-Z]*: (\S+)/'
echo $output
A saída que obtenho sem o regex awk é:
Passcode: 543245324532455464
Meu regex analisará a saída e armazenará apenas o 543245324532455464
valor na variável de saída. Isso é o que eu esperava que acontecesse. Se eu acrescentar | awk '/^ [a-zA-Z]*: (\S+)/'
ao final do comando, ele não retornará nada, apenas em branco. Se eu retirá-lo, ele retornará a saída que espero.
Alguém pode me dizer como posso armazenar os dados corretos em minha variável no bash?
Responder1
Conforme escrito, você captura a saída de /usr/bin/expect e não canaliza nada para awk - o parêntese de fechamento da substituição do comando precisa ir no final do pipeline
não
... ) | awk '/^ [a-zA-Z]*: (\S+)/'
mas
... | awk '/^ [a-zA-Z]*: (\S+)/')
Esteja ciente de que isso \S
não é padrão (PCRE) e pode não ser suportado em todas as versões do awk e que o grupo de captura provavelmente não terá nenhum efeito - você pode fazer melhor com algo como
awk -F': ' '$1 ~ /Passcode/ {print $2}'