파일에 특정 문자열이 있을 때 명령을 반복하는 방법은 무엇입니까?

파일에 특정 문자열이 있을 때 명령을 반복하는 방법은 무엇입니까?

출력에 오류를 나타내는 특정 문자열이 있으면 명령을 반복하고 싶습니다. 내가 하고 싶은 명령은 에서 반복하는 것입니다 gksu ./installer.run > ./inst.log 2>&1 . Bash 명령줄에서 이 작업을 어떻게 수행합니까?'string'./inst.log

답변1

파일에서 문자열을 찾습니다.

grep -q string file

종료 값은 grep이 무엇인가를 찾았는지 여부를 알려줍니다.

그런 다음 명령이 실제 종료 값을 반환하는 한 반복할 수 있습니다.

while command ; do
    repeat this
done

명령을 한 번 이상 실행하고 싶더라도

while true ; do
    some command
    if ! grep -q string file ; then
        break         # jump out of the loop if it's _not_ there
    fi
done

그렇지 않으면 루프 앞과 내부에서 명령을 반복해야 합니다.

답변2

에서는 이라는 점에 유의하세요 while while-cmd-list; do do-cmd-list; done.while-cmd-list반품명령 목록. 단일 명령일 필요는 없습니다.

그래서 당신은 이것을 할 수 있습니다 :

while
  gksu ./installer.run > ./inst.log 2>&1
  grep -q string inst.log
do
  echo >&2 "Trying again, output contained string"
done

여기서도 다음을 수행할 수 있습니다.

while
  gksu ./installer.run 2>&1 |
    tee ./inst.log |
    grep string > /dev/null
do
  echo >&2 "Trying again, output contained string"
done

-q( 이렇게 하면 grep조기 종료가 발생하여 설치 프로그램이 SIGPIPE를 수신하게 될 수 있으므로 이를 사용하지 않았습니다 .)

관련 정보