make some_target이 존재하는지 찾으려는 간단한 스크립트가 있습니다. 존재하지 않으면 명령문을 인쇄하고 1로 종료하십시오.
#!/bin/bash
set +ex
output=$(make -n some_target 2>&1 | head -1)
echo "$output"
if [ "$output" == "*No rule to make target*" ]; then
echo "Target is not Present"
exit 1
else
echo "foo"
fi
하지만 오류가 발생하고 else 루프로 들어갑니다.
make: *** No rule to make target 'some_target'. Stop.
test.sh: 5: [: make: *** No rule to make target 'some_target'. Stop.: unexpected operato
foo
답변1
아래에서 답을 찾을 수 있었습니다.
#!/bin/sh
set +ex
if make -n some_target 2>&1 | grep -m 1 "No rule to make target"; then
echo "Target is not Present"
exit 1
else
echo "foo"
fi
답변2
패턴 일치(*)는 다음에서 수행할 수 있습니다.bash
논리 연산자 ==
, =
, , !=
여기서 오른쪽 피연산자는 패턴으로 간주됩니다. 따라서 조건을 작성할 수 있습니다.
if [[ $output == *'No rule to make target'* ]]
답변에 가 포함되어 있는지 확인하세요 No rule to make target
.
즉, make
?의 반환 코드를 확인하는 것이 더 효율적일 수 있습니다.
(*) 파일명의 기본 패턴 매칭과 동일합니다. =~
정규식을 취하는 논리 연산자 도 있습니다 .