bash make가 뭔가를 했는지 확인하세요

bash make가 뭔가를 했는지 확인하세요

makebash 스크립트에서 전화하고 있습니다. 스크립트의 나머지 부분은 make실제로 어떤 일을 하는 경우에만 실행하면 됩니다(즉, 말하지 않는 경우 nothing to be done for...).

Bash에서 어떻게 확인할 수 있나요? 반환 코드는 다음과 같습니다.하다발생하므로(실패하지 않음) 사용할 수 없습니다. make출력을 비교하고 출력 내용이 포함되어 있는지 확인하는 것보다 더 좋은 방법이 있습니까 nothing to be done for?

저는 GNU Make 4.0을 사용하고 있습니다.

답변1

워크플로에서 이를 수용할 수 있는 경우 make파일을 업데이트하기 위해 실행하기 전에 연습 실행을 보낼 수 있습니다.

-q, --질문

"질문 모드". 어떤 명령도 실행하지 말고 아무것도 인쇄하지 마세요. 지정된 대상이 이미 최신인 경우에만 종료 상태 0을 반환하고, 그렇지 않으면 0이 아닌 값을 반환합니다.

--recon(이것이 행동의 일부가 아니라는 사실에 조금 놀랐습니다 .)

답변2

나는 이것이 당신이 원하는 것을 할 것이라고 믿습니다. 테스트에는 GNU grep을 사용하십시오.

mk_output=$(make)   # add whatever make options you use
if printf '%s\n' "$mk_output" | grep -qF 'Nothing to be done for'
then
    echo '"Nothing to be done for" was present in output'
else
    echo '"Nothing to be done for" was NOT present in output'
fi

출력을 캡처 make한 다음 grep(Quiet 및 고정 문자열 옵션)을 사용하여 원하는 문자열을 찾습니다. 종료 상태는 발견된 경우 0이고 grep, 발견되지 않은 경우 1입니다.

이후 생각:

make이는 일반적으로 많은 출력을 생성하므로 첫 번째 줄을 다음과 같이 변경하는 것이 좋습니다.

mk_output=$(make (make options) | grep -qF 'Nothing to be done for')

이 경우 mk_output규모는 그리 크지 않습니다.

make실행하는 동안 출력을 보고 캡처 하려면 tee파일로 캡처를 사용하십시오.

make | tee make_output
if grep -qF 'Nothing to be done for' make_output
then etc.

관련 정보