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

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

출력에 오류가 있음을 나타내는 특정 문자열이 있는 동안 명령을 반복하고 싶습니다. 내가 원하는 명령은 에 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를 수신하게 될 수 있음을 의미합니다).

관련 정보