Анализ вывода ожидаемой переменной и использование его в скрипте bash

Анализ вывода ожидаемой переменной и использование его в скрипте bash

У меня есть скрипт bash, который использует expect внутри скрипта bash. Этот скрипт bash запросит пароль внутри части expect скрипта, а затем вернет какой-то вывод. Я хочу взять этот вывод и проанализировать его так, чтобы он отображал мне только часть вывода и сохранял ее в переменной, которую может использовать обычный скрипт bash. Мой скрипт:

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

Вывод, который я получаю без awk regex, таков: Passcode: 543245324532455464 Мое regex проанализирует вывод и сохранит только 543245324532455464значение в выходной переменной. Я на это и надеялся. Если я добавлю | awk '/^ [a-zA-Z]*: (\S+)/'в конец команды, она ничего не вернет, просто пустое значение. Если я уберу его, она вернет ожидаемый мной вывод.

Может ли кто-нибудь подсказать, как мне сохранить правильные данные в моей переменной в bash?

решение1

Как написано, вы захватываете вывод /usr/bin/expect, а затем ничего не передаете в awk - закрывающая скобка подстановки команды должна находиться в конце конвейера.

нет

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

но

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

Имейте в виду, что \Sэто нестандартно (PCRE) и может не поддерживаться во всех версиях awk, а группа захвата, скорее всего, не даст никакого эффекта — вам может подойти что-то вроде

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

Связанный контент