구성 줄을 추가하기 위해 Makefile에 일련의 명령을 추가하고 싶습니다.아직 나타나지 않았을 때.나는 과거에 다음과 같이 이 작업을 수행했습니다.
grep -vq "keyword" /a/b/c.conf && echo "abc keyword" >> /a/b/c.conf
그러나 나는 분명히 뭔가를 간과하고 있습니다. 있는 그대로 명령을 실행하면 다시 실행하면 구성 줄이 중복됩니다.
수동 테스트에서는 이 모드가 예상대로 작동하는 것으로 나타났습니다.
grep -vq "keyword" /a/b/c.conf && echo "the line is absent"
... 인쇄행이 존재하지 않습니다. 오직라인이 실제로 존재하지 않는 경우. 그리고 echo
명령이 정확합니다 .아니요이 줄이 실행될 때전시하다.
내가 무엇을 놓치고 있나요?
노트:위의 예는 가독성을 위해 요약되었습니다. 실제로 유사한 명령이 많이 있을 것입니다. 내가 시도한 특정 명령은 다음과 같습니다.
grep -vq "md_module" /etc/httpd/conf.modules.d/00-ssl.conf && echo "LoadModule md_module module/mod_md.so" >> /etc/httpd/conf.modules.d/00-ssl. 회의
답변1
문제는 grep -v
그것이 일치한다는 것입니다.철사표현식이 일치하지 않는 파일이 아니라 표현식이 일치하지 않는 파일이...
따라서 파일에어느일치하지 않는 줄은 grep -v
해당 줄과 일치하므로 grep은 성공을 반환합니다.
더 좋은 방법은 다음을 사용하는 것입니다.긍정적인키워드를 일치시킨 후 필요한 경우 ||
(대신 )을 사용하여 &&
줄을 추가합니다 .
grep -q "keyword" /a/b/c.conf || echo "abc keyword" >> /a/b/c.conf
테스트에서는 echo "the line is absent"
존재하지 않는다고 나올 수도 있지만 실제로는 존재하지 않습니다. 그렇다면 아무것도 하지 마세요.오직철사. 이것을 추가로 테스트하면 키워드와 일치하지 않는 행이 있는 한 일치하는 결과를 얻게 될 것입니다.
이것이 명확해지기를 바랍니다!