Analizar la salida de una variable esperada y utilizarla en un script bash

Analizar la salida de una variable esperada y utilizarla en un script bash

Tengo un script bash que usa expect dentro del script bash. Este script bash solicitará una contraseña dentro de la parte esperada del script y luego devolverá algún resultado. Quiero tomar ese resultado y analizarlo para que solo me muestre una parte del resultado y lo almacene en una variable que el script bash normal pueda usar. Mi guión es:

#!/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

El resultado que obtengo sin la expresión regular awk es: Passcode: 543245324532455464 Mi expresión regular analizará la salida y solo almacenará el 543245324532455464valor en la variable de salida. Eso es lo que esperaba que hiciera. Si agrego | awk '/^ [a-zA-Z]*: (\S+)/'al final del comando, no devuelve nada, solo un espacio en blanco. Si lo quito, devuelve el resultado que espero.

¿Alguien puede decirme cómo puedo almacenar los datos correctos en mi variable en bash?

Respuesta1

Tal como está escrito, usted captura la salida de /usr/bin/expect y luego no canaliza nada a awk; el paréntesis de cierre de la sustitución del comando debe ir al final de la canalización.

no

... ) | awk '/^ [a-zA-Z]*: (\S+)/'

pero

... | awk '/^ [a-zA-Z]*: (\S+)/')

Tenga en cuenta que \Sno es estándar (PCRE) y es posible que no sea compatible con todas las versiones de awk y que el grupo de captura probablemente no tendrá ningún efecto; podría hacerlo mejor con algo como

awk -F': ' '$1 ~ /Passcode/ {print $2}'

información relacionada