
У меня есть скрипт 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}'