"grep" 출력을 기반으로 명령을 종료하시겠습니까? [폐쇄]

"grep" 출력을 기반으로 명령을 종료하시겠습니까? [폐쇄]

다음과 같이 시스템에 로그인하는 명령줄 인터페이스가 있습니다.

$ cli -u username -p password

잘못된 비밀번호가 제공되면 "잘못된 자격 증명"이라는 메시지가 표시되고 올바른 비밀번호가 입력될 때까지 기다린 후 종료되지 않습니다. 올바른 비밀번호를 입력하면 메시지가 표시되지 않고 바로 로그인됩니다.

사용자 입력을 기다리지 않고 비밀번호가 틀리면 명령을 종료하고 싶습니다.

아이디어는 Credentials 키워드를 찾고 발견되면 명령을 종료하는 것입니다.

$ cli -u username -p password | grep Credentials

어떻게 해야 하나요?

답변1

배경

나는 귀하의 유틸리티를 다음과 같이 cli모델링했습니다 .

$ cat cli
#!/bin/bash

while IFS= read -r line; do
  if [ "$line" == "password" ]; then
    break
  else
    echo 'Credentials incorrect'
  fi
done

사용grep

grep -m1 ...그런 다음 첫 번째 일치 항목을 찾은 후 브레이크아웃을 사용할 수 있습니다 . 메서드 -m1는 첫 번째 일치 후에 중지됩니다.

잘못된 비밀번호
$ ./cli | grep -m 1 "Credential"
blah
Credentials incorrect

$
좋은 비밀번호
$ ./cli | grep -m 1 "Credential"
password
$

사용sed

비슷한 접근 방식이 사용됩니다 sed.

잘못된 비밀번호
$ ./cli | sed '/Credential/ q'
blah
Credentials incorrect

$
좋은 비밀번호
$ ./cli | sed '/Credential/ q'
password
$

답변2

프로세스를 종료하는 대신 다음과 같은 것을 확인할 수 있습니다.연결을 끊기 전에 시도해 보세요.구성 파일에서. 저는 보통 SSH 로그인 시도를 제한하기 위해 이렇게 합니다.

관련 정보