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


11

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

make TOOL=alternative-tool

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

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

make TOOL=true

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

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


Makefile은 주석 gnu.org/software/make/manual/html_node/Makefile-Contents.html을 지원 합니다. 줄 앞에 주석을 달고 코드를 문서화하십시오. 이는 혼란을 줄이고 왜 특정 접근 방식을 사용했는지 설명합니다.
Freiheit

1
어떤 라인? 은 TOOL=true아마 근처에 README에 설명 메이크업을 호출 할 때 명령 행에있을 것입니다. 도구를 호출하는 실제 행은 7000 행 (타사) 메이크 파일 내에 있습니다.
Roger Lipscombe

답변:


42

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

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

make TOOL=true

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

make TOOL=/bin/true

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


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

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


1
사용하면 :나에게 잘 작동하는 것 같습니다. make항상 자신의 대체를 수행 한 후에 각 명령을 실행하기 위해 쉘을 생성합니다.
hmakholm 님이 Monica

@HenningMakholm 감사합니다. 편집했습니다. 답변을 게시 할 수 있습니다. Lok Lam Cheng 은 제안 하기 위해 질문댓글을 달았: 지만 대답은 (특히 올바른 경우) 대답해야하며 그 의견은 왜 그것이 효과가 있을지 설명하지 않습니다. hello.cmakefile 이 있고없는 디렉토리 에서 make hello컴파일 hello.c하는 곳 hello에서 나는 make CC=: hello당신이 말하는 것에 따라 행동하는 것을 발견했습니다 .
Eliah Kagan

2
불행히도이 특정 Makefile ( erlang.mk 사용 )의 경우 :에는 작동하지 않습니다. 명백한 /bin/true것이 아마도 최선의 방법 일 것입니다.
Roger Lipscombe

7

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

make TOOL=echo

나는 이것이 중요한 일을 할 때 유용하다고 생각합니다 TOOL. 이 명령이 -s없거나 동등하면 make중복 정보를 생성합니다. 명령 makeecho명령이 make별도로 출력을 출력하기 때문입니다. 예를 들어, makefile make CC=echo hellohello.c없고없는 디렉토리에서 실행할 때 echo hello.c -o hello첫 번째 출력 줄과 hello.c -o hello두 번째 줄을 얻습니다 . 그러나 일부 빌드는 use (또는 사용자가 추가 할 수 있음) -s를 사용하면 도움이됩니다. make -s CC=echo hello그냥 제공합니다 hello.c -o hello.
Eliah Kagan

(명령에 쉘 확장이 포함 된 경우에도 여전히 유용 할 수 있으므로 관심이있는 경우 실행중인 항목에 대한 명확한 아이디어를 얻을 수 있습니다)
muru

5

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

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

  • 빈 쉘 스크립트

  • 거의 빈 C 프로그램 :

    int main() {
        return 0;
    }

그러한 프로그램의 좋은 이름은 noop 또는 no-op입니다.
arp

0

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

skip -> /bin/true

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

make TOOL=./skip

-2

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

function T() { /bin/true; }

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

false; T; echo $?

3
Make 변수 값 (문제의 상황에서 사용하기 위해)에서이 함수를 호출하는 방법을 설명해 주시겠습니까?
David Foerster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.