쉘을 사용하여 조건에서 중첩 명령 확인

쉘을 사용하여 조건에서 중첩 명령 확인

현재 작업 중인 git 디렉토리가 더러운지 확인하고 이에 따라 T/F를 반환하는 짧고 이식 가능한 방법을 만들려고 합니다. 내 궁극적인 목표는 이것을 Makefile에 통합하는 것이며 다음과 같이 달성했습니다.

GIT_DIRTY       := $(shell [[ -n $(git status -s) ]] && echo '\ dev')

내 문제는 [[연산자가 bash 전용이며 요구 사항에 따라 이 Makefile은 sh완전한 기능을 갖춘 쉘만 사용하여 실행할 수 있어야 한다는 것입니다. 내 직감으로는 [or 를 사용하여 이 작업을 수행할 수 있는 방법이 있을 것 같은데 test, 방법을 잘 모르겠습니다.

감사해요!

답변1

GIT_DIRTY := $(shell [ -n "$(git status -s)" ] && echo '\ dev')

작동해야 하지만 명령이 작동하더라도 작동하지 않습니다 . 함수의 어떤 부분이 명령을 좋아하지 않는 sh것 같습니다 .shellmake

shell해결 방법은 다음과 같습니다. 더 간단한 명령을 사용하여 조건부 함수 자체를 제공 하고 사용하여 make나머지 작업을 수행합니다.

GIT_STATUS := $(shell git status -s)

GIT_DIRTY := $(if ${GIT_STATUS},DIRTY,CLEAN)

all:
    @echo ${GIT_DIRTY}

관련 정보