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
? 의 반환 코드를 확인하는 것이 더 효율적일 수 있습니다.
(*) 이는 파일 이름에서 수행되는 것과 동일한 기본 패턴 일치입니다. =~
정규식을 취하는 논리 연산자도 있습니다 .