예상 변수의 출력을 구문 분석하고 이를 bash 스크립트에서 사용합니다.

예상 변수의 출력을 구문 분석하고 이를 bash 스크립트에서 사용합니다.

Bash 스크립트 내에서 예상을 사용하는 bash 스크립트가 있습니다. 이 bash 스크립트는 스크립트의 예상 부분 내에서 비밀번호를 묻는 메시지를 표시한 다음 일부 출력을 반환합니다. 나는 그 출력을 가져와서 구문 분석하여 출력의 일부만 나에게 표시하고 이를 일반 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 정규식 없이 얻은 출력은 다음과 같습니다. Passcode: 543245324532455464 내 정규식은 출력을 구문 분석하고 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}'

관련 정보