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}'