패턴이 파일과 일치하면 0을 반환하는 방법은 무엇입니까? [복사]

패턴이 파일과 일치하면 0을 반환하는 방법은 무엇입니까? [복사]

mkbootimg가 아닌 안드로이드 커널을 다시 패키지하는 바이너리가 있습니다. 이 프로세스를 자동화하는 스크립트를 만들고 있습니다.

화면에 어떤 출력도 원하지 않습니다. 그래서 출력을 foo.log라는 파일로 리디렉션합니다.

명령은 -kernel_make "$zImage" "$ramdisk" "$cmdline" "$image" &> data/local/working/foo.log

내 현재 작업 폴더는 입니다 data/local/working/. 내가 원하는 것은 출력의 마지막 줄(foo.log)이 다음과 같은 경우입니다.

"targed file $1 is patched sucesfully, enjoy new kernel"

그런 다음 0을 반환하고 종료합니다. 그렇지 않으면 1을 반환하고 종료합니다.

grep을 사용하여 수행하려고 하는데 명령줄을 처음 사용하기 때문에 올바른 방법으로 수행하는 방법을 모르겠습니다.

답변1

그렙 종료기본적으로 0일치하는 경우와 1일치하지 않는 경우입니다. 그래서 당신은 이것을 할 수 있습니다 :

grep -q "targed file \$1 is patched sucesfully, enjoy new kernel" foo.log

모든 출력을 억제합니다 -q.

테스트하려면 다음과 같이 말하세요.

grep -q "targed file \$1 is patched sucesfully, enjoy new kernel" foo.log && echo OK || echo BAD

실제로 파일 이름으로 대체된 경우 또는 와 같은 이름 으로 $1대체할 수 있습니다 .\$1.*\S\+

다음 사항을 수정(확인)하는 것도 고려할 수 있습니다.

targed     -> target
sucesfully -> successfully

댓글에서 언급했듯이 이는 전체 파일과 일치합니다. tail@orion이 설명한 대로 사용하세요.

답변2

grep일치하는 항목이 발견되면 0을 반환하는 방식입니다. 실제로 해당 행을 출력할 필요는 없으므로 해당 행을 버리고 테스트를 사용하십시오. 귀하의 경우 이것은 단지

lastline=$(tail -n1 logfile)
if grep pattern <<<"$lastline" &>/dev/null; then
    echo "yay, found pattern"
else
    echo "darn"
fi

<<<문자열을 grep읽을 파일로 렌더링하고 &>표준 출력 및 오류 출력(이 경우 null로)을 리디렉션 하는 "여기 문자열" 구문을 살펴보세요 . 모드는 "Enjoy" 또는 다른 것일 수 있습니다. echo를 사용자 정의 처리로 바꾸십시오.

kernel_make그러나 실패 시 1이 반환되는지 확인하는 것이 더 합리적입니다. 사용자 친화적인 로그 출력을 구문 분석할 필요가 없습니다(변경될 수 있거나 더 이상 마지막 메시지가 아닐 수 있음). 만약 그렇다면 (아마도) 나는 이렇게 할 것이다.

kernel_make [...arguments...] && echo "yay" || echo "nay"

(또는 grep 케이스와 같은 if 문). 실패 시 exit양식에 사용될 수 있는 명령문 에 익숙할 것입니다.exit 1

스크립트의 마지막 줄 이라면 kernel_make아무것도 할 필요도 없습니다...

관련 정보