당신은 차별 하고 숨길 수 있습니다
pecl install foo
아래 기술 을 사용한 명령 의 반환 값 호출의 리턴 값을 저장하지만 'true'명령이 효과적으로이를 마스크하여 명령문이 값에 관계없이 0을 리턴합니다 retVal
.
pecl install foo >/dev/null 2>&1 || { retVal=$?; true; }
그러나...
pecl install
실패의 특성에 관계없이 1의 값을 반환하는 것처럼 보이 므로이 방법은별로 도움이되지 않습니다 . 빠른 테스트에서 이미 설치된 패키지 또는 패키지를 찾을 수 없음 오류가 모두 1을 반환 함을 보여줍니다.
대신 호출하기 전에 패키지가 이미 설치되어 있는지 간단히 확인하려고 pecl install
합니다.
패키지가 설치되어 있는지 확인하려면 이름에 pecl 접두사가 포함되어 있지 않다고 가정합니다. 예 : jsonc not pecl / jsonc; pecl list-all의 출력은 항상 pecl로 시작합니다. 명확히하기 위해 jsonc 패키지로 작업하고 있다고 가정 해보십시오.
pkg="jsonc"
pecl list-all | grep "$pkg"
이 출력이 설치되어 있다고 가정합니다.
pecl/jsonc 1.3.10 JavaScript Object Notation
패키지를 잘못 선언하지 않도록 grep과 함께 사용되는 정규 표현식은 해당 출력 형식을 활용합니다. 패키지 이름과 단순히 일치하는 경우 jsonc의 일치도 jsoncde와 일치합니다 (실제 패키지는 아님). 따라서 정규 표현식은 pecl/
패키지 이름 뒤에 공백 이있는 줄의 시작 부분 과 패키지 이름을 찾습니다 ."^pecl/$pkg "
사용 가능한 패키지 이름을 기반으로 정규식을 수정해야 할 수도 있습니다.
#!/bin/bash
if [ $# -lt 1 ]; then
echo "Package name must be passed as sole argument"
exit 2
else
pkg="$1"
fi
if pecl list-all | grep -Eq "^pecl/$pkg " ; then
echo "package $pkg is already installed"
exit 0
else # not installed
if pecl -q install "$pkg" >/dev/null ; then
echo "Package $pkg installed successfully"
exit 0
else
echo "Error occurred during installation of $pkg"
exit 1
fi
fi
pecl list-all | grep ...
설치된 패키지를 확인할 때 명령이 제대로 작동하지 않으면 명령을 사용할 수도 있습니다 pecl info $pkg
. 많이 조사하지는 않았지만 쿼리 할 패키지가 설치되면 0 (그리고 많은 정보를 stdout에 반환)하고 패키지가 설치되지 않은 경우 1을 반환합니다 (그리고 stderr에 오류가 있음) ).