BASH 스크립트를 사용하여 세 번째 소스에서 콘솔에 표시된 출력을 읽으시겠습니까?

BASH 스크립트를 사용하여 세 번째 소스에서 콘솔에 표시된 출력을 읽으시겠습니까?

read사용자 입력 대신 콘솔에서 정보를 "읽는" 방법을 이해하는 데 문제가 있습니다 . 효과적으로 "라인을 얻는 것"? 콘솔에서.

이것이 내 시나리오입니다. echo "information" | ncat "IP" "PORT"올바른 정보를 캡처하기 위해 데몬을 실행하면서 네트워크 내부에 있는 포트로 전송하고 있습니다 .

잘못된 정보를 보내면 잘못된 정보를 보냈다는 사전 정의된 메시지를 받고 다시 시도합니다. 그런데 정보가 맞다면 다른 답변이 나오며 어떤 답변인지 알 수 없습니다.

다음은 지금까지 시도한 BASH 스크립트의 일부입니다.

if [[read -r line ; echo "$line" ; while "$line" == "Information wrong try again!"]] ; continue
elif [[read -r line ; echo "$line" ; while "$line" != "Information wrong try again!"]] ;break

나는 bash를 처음 접했기 때문에 내가 사용하는 구문이 정확하지 않을 수 있습니다.

답변1

당신의 문법이 모두 틀린 것 같습니다. 나는 당신이 다음과 같은 것을 찾고 있다고 생각합니다.

if [ "$line" = "Information wrong try again!" ]; then
  echo "Try again"
else
    echo "All's well"
fi

물론 세부 사항은 스크립트를 실행하는 방법에 따라 다릅니다. 무한 루프가 되도록 하고 echo "information" | ncat "IP" "PORT"작동할 때까지 명령을 다시 실행하려면 다음과 같이 해야 합니다.

line=$(echo "information" | ncat "IP" "PORT")
while [ "$line" = "Information wrong try again!" ]; do
    line=$(echo "information" | ncat "IP" "PORT")
    sleep 1 ## wait one second between launches to avoid spamming the CPU
done

## At this point, we have gotten a value of `$line` that is not `Information wrong try again!`, so we can continue. 
echo "Worked!"

또는 유사하게:

while [ $(echo "information" | ncat "IP" "PORT") = "Information wrong try again!" ]; do
    sleep 1 ## wait one second between launches to avoid spamming the CPU
done

## rest of the script goes here
echo "Worked!"

관련 정보