확인 : 명령이 실패한 후 계속하는 방법?


143

명령 이 중지되는 $ make all등의 오류를 제공 rm: cannot remove '.lambda': No such file or directory합니다. rm-not-found-errors를 무시하고 싶습니다. 어떻게 강제로 만들 수 있습니까?

메이크 파일

all:
        make clean
        make .lambda
        make .lambda_t
        make .activity
        make .activity_t_lambda
clean:
        rm .lambda .lambda_t .activity .activity_t_lambda

.lambda:
        awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda

.lambda_t:
        paste .lambda t_year > .lambda_t

.activity:
        awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity

.activity_t_lambda:
        paste .activity t_year .lambda  | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex

답변:


264

-i깃발 (또는 --ignore-errors)을 보십시오 . 이 문서 는 다음과 같은 방법으로 더 강력한 방법을 제안합니다.

명령 행에서 오류를 무시하려면 -행 텍스트의 시작 부분 (초기 탭 뒤)에 a 를 쓰 십시오. 는 -명령이 실행 쉘에 전달되기 전에 삭제됩니다.

예를 들어

clean:
  -rm -f *.o

이 원인 rm은 파일을 제거 할 수없는 경우에도 계속.

모든 예제는와 함께 rm있지만 오류를 무시해야하는 다른 명령 (예 :)에 적용 할 수 있습니다 mkdir.


30
하지 마십시오 것을! 오류를 무시해서는 안됩니다. rm에 -f 플래그를 추가하기 만하면 존재하지 않는 파일을 삭제하려고 할 때 더 이상 실패하지 않습니다. 그러나 실제로 파일을 삭제하지 못하면 여전히 반환되고 오류가 발생합니다. 그것은 당신이 원하는 행동입니다. 문제가 발생하면 실패합니다!
Kristof Provost

15
@ 크리스토프 프로보 스트 동의. rm -f사용자가 겪고있는 특정 문제에 대해 더 좋지만 때로는 안전하지 않은 경우에도 일반적인 솔루션에 대해 알고있는 것이 좋습니다.
brian_o

1
정말 유용합니다, 엘리 감사합니다.
Dr Beco

1
또한 Make $(RM)대신 제공 할 수도 있습니다 rm -f.
reitermarkus

32

make -k(또는 --keep-goinggnumake에서) 당신이 요구하는 것을 할 것입니다.

실제로 실패한 델 또는 rm 라인을 찾아서 -f그 에러가 다른 사람에게 발생하지 않도록 a 를 추가 해야합니다.


1
아무 말도하고 싶지 않았지만 그들의 생각이 무엇인지 궁금했습니다. 왜 그 깃발이 적절하지 않은지 알 수없는 이유가 있다면, 기르는 것이 좋을 것입니다.
TED

3
오류를 무시해서는 안됩니다. Brian, Oded 및 NebuSoft가 제안한 솔루션이 맞습니다. 이 답변과 잘못된 답변입니다.
Kristof Provost

1
@KristofProvost-아. 충분하다고 생각합니다. 일반적으로 나는 또한 문제의 근원에 도달하는 답변이 묻는 질문에 대답하는 답변보다 우수하다고 생각합니다. 나는 그것을 위해 누군가를 downvote 확신하지 않지만 다른 스트로크 ...
TED

5
좋은 대답입니다. 여기에는 다른 답변에 포함되지 않은 간단한 최상위 플래그가 포함되어 있지만 여전히 올바른 동작을 권장합니다. 오류는 무시해서는 안되지만 옵션을 아는 것이 좋습니다.
brian_o

1
유용한 것은 컴파일러 오류를 무시하는 것입니다 ... make컴파일러가 막힌 것을 수정하면서 가능한 한 많은 컴파일 단위를 빌드 할 수 있습니다 . 그렇게하면 깨진 것을 고쳤을 때 다른 모든 것이 구축 될 때까지 기다릴 필요가 없습니다.
inetknght

20

깨끗하게 변경

rm -f .lambda .lambda_t .activity .activity_t_lambda

즉, 제거를 요구하지 않습니다. 파일이 존재하지 않으면 불평하지 마십시오.


16

명령을 사용 rm하여 파이프 뒤의 리턴 코드 를 차단하여 성공적으로 true리턴 0( 항상 리턴 (성공))

rm file | true

11

한 줄에서 실제로 오류를 무시하게 ; true하려면 반환 값을 0으로 설정하여 접미사 를 붙이면됩니다. 예를 들면 다음과 같습니다.

rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true

그러면 stderr 출력이 null로 리디렉션되고 true로 명령을 따라갑니다 (항상 0을 반환하여 make는 실제로 발생한 상황에 관계없이 명령이 성공했다고 믿게 함). 프로그램 흐름을 계속할 수 있습니다.


1
이것은 앞선 대시가없는 곳에서 작동합니다 (실패 해야하는 테스트를 실행하기 위해 makefile이 주어지고 나중에 로그를 구문 분석 할 것입니다)
Sean Houlihane

2

귀하의 불만 사항이 변경 되지 clean않도록 변경하십시오 rm.

clean:
    rm -f .lambda .lambda_t .activity .activity_t_lambda

1

명령에 -f옵션을 넣으십시오 rm.

rm -f .lambda .lambda_t .activity .activity_t_lambda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.