상태가 0으로 종료되는 명령 (/ bin / true 아님)? 명령을 대체

시간이 조금 걸리는 도구를 실행하는 Makefile이 있습니다. 사용 된 명령을 대체 할 수 있습니다.

make TOOL=alternative-tool

Makefile에서 해당 단계를 건너 뛰고 싶습니다. 따라서 상태 0으로 종료되고 부작용이 무시할 수있는 명령을 찾고 있습니다.

분명히, 나는 단지 사용할 수 true는 있지만 다소 혼란 스럽습니다.

make TOOL=true

마치 도구를 실행 하려는 것처럼 보이지만 그렇지 않습니다.

/bin/true상태 0으로 종료 되지 않고 이름이 적고 입력하기 쉬운 기본 설치 실행 파일이 있습니까?



답변

“”가 아닌 것을 요청했지만 “true”라는 다른 의미보다는 프로그램이라는 것을 전체 이름 으로 /bin/true바꾸는 것이 아마도 가장 좋은 해결책 일 것입니다.true/bin/truetrue

당신의 관심사는 점이다 true에서

make TOOL=true

명령 이름 이외의 것으로 보입니다. 하지만 글을 쓰면

make TOOL=/bin/true

그것은 분명한 명령입니다. 누군가 TOOL=true어딘가에 다른 도구가 의도되어 있음을 의미하는 TOOL=/bin/true것으로 잘못 읽을 수도 있지만, 그러한 오해의 가능성은 없습니다 .


:쉘 내장이지만 외부 명령이 아닌 when 작동하는지 확실하지 않습니다. Henning Makholm그것이 효과있다고보고했다 . 그러나 나는 그것이 모든 상황에서 작동하지 않는다고 생각하며, 그것이 당신에게 효과가 없다는 것을 알았습니다 .

쉘 별명에 대해서는 명령에 전달하는 인수에서 별명 확장이 수행되지 않거나 makefile이 이전에 정의 된 쉘 별명을 사용하지 않으므로이를 사용할 수 없습니다. make새 쉘에서 명령을 실행 하더라도 해당 쉘은 별명을 갖지 않습니다 (별칭 확장이 자동으로 사용 가능하지 않은 비 대화식 쉘이기 때문에 별명을 사용하더라도 사용하지 않습니다).


답변

전체 경로를 사용하는 true것이 가장 좋은 솔루션 이라는 데 동의하지만 실제 명령 실행을 피하는 가장 일반적인 방법은 무엇입니까 echo? 그래서:

make TOOL=echo

답변

당신은 항상 제로 종료 상태를 반환하지만 아무것도하지 않는 자신의 명령을 만들 수 있습니다. 일부 옵션 :

  • 적절한 이름의 심볼릭 링크 /bin/true

  • 빈 쉘 스크립트

  • 거의 빈 C 프로그램 :

    int main() {
        return 0;
    }

답변

작업 디렉토리에 / bin / true와 같은 기호 링크를 작성하십시오 skip. 그러므로…

skip -> /bin/true

그러면 make line이 될 수 있습니다 …

make TOOL=./skip

답변

약간 더 많은 문자로 처리하는 방법은 다음과 같습니다.

function T() { /bin/true; }

한 번 완료 한 후에는 name을 사용하여 다시 실행할 수 있습니다 T.

false; T; echo $?