Bash 스크립트 내에서 Expect를 사용하는 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}'