쉘 스크립트에서는 소스가 대상보다 최신인 경우에만 명령을 실행합니다.

쉘 스크립트에서는 소스가 대상보다 최신인 경우에만 명령을 실행합니다.

나는 이것의 단순화된 버전을 찾고 있습니다:

dep=0
if [ ! -e targetfile ]
then
    dep=1
elif [ targetfile -nt sourcefile ]
then
    dep=1
fi
if [ $dep -eq 0 ]
then
    echo "Already up to date"
    exit 0
fi

단일 명령문으로 소스 파일의 존재 여부와 연령을 테스트할 수 있는 명령이 있어야 할 것 같습니다. 불행하게도 -nt대상 파일이 전혀 존재하지 않으면 bash는 실패합니다. 또한 bashand 와 호환되어야 합니다 dash(그래서 현재는 사용하지 않습니다 &&).

답변1

이는 bash와 dash 모두에서 작동합니다.

if [ ! -e targetfile ] || [ targetfile -nt sourcefile ]
then
    echo "Already up to date"
    exit 0
fi

그러나 당신은 다음과 같은 것을 원하는 것 같습니다.만들다.

을 작성할 bash수도 있지만
make -f- <<<'targetfile: sourcefile ;' && exit 0구문 은 bash에 따라 다르므로 실제 Makefile이 필요
합니다 . :)<<<
echo "targetfile: sourcefile ;" | make -f- && exit 0

관련 정보