Analise a saída de uma variável expect e use-a em um script bash

Analise a saída de uma variável expect e use-a em um script bash

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 543245324532455464valor 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 \Snã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}'

informação relacionada