홈브류 패키지가 설치되었는지 감지


104

시스템에 여러 홈브류 패키지가 설치되어 있는지 감지하는 쉘 스크립트를 작성하려고합니다. 이를 달성하기 위해 brew 명령을 사용하는 방법이 있습니까?

의 종료 코드를 사용해 보았습니다 brew install <formula> --dry-run. 그러나 이것이없는 경우 패키지를 빌드합니다.


brew --cellar "$formula" >/dev/null 2>&1 --cellar formula: Display the location in the cellar where formula would be installed, without any sort of versioned directory as the last path. brew man 페이지 ; 답변으로주고 사랑을 것이다
166_MMX

if [ ! -x "$(command -v PKG_EXEC)" ]; then # package not installed fi
JBallin

답변:


164

당신이 사용할 수있는

brew ls --versions myformula

각 공식의 설치된 버전을 출력합니다. 수식이 설치되어 있지 않으면 출력이 비어 있습니다.

에서 얻을 수있는 최신 버전의 homebrew를 사용하는 brew update경우 다음을 실행하면됩니다 (Slaven에게 감사드립니다).

if brew ls --versions myformula > /dev/null; then
  # The package is installed
else
  # The package is not installed
fi

즉, 각 홈브류 패키지를 확인하는 것뿐만 아니라 도구의 존재를 확인하는 것이 좋습니다 (예 :에서 실행 파일 검색 $PATH). 사람들은 실제로 많은 방법으로 도구를 설치하는 경향이 있으며 homebrew는 그중 하나 일뿐입니다.


6
github.com/Homebrew/brew/commit/… 이후 종료 코드를 확인하는 것으로 충분합니다. 공식이 설치되어 있지 않으면 false (1)가 반환됩니다.
Slaven Rezic 2016 년

그래서 내가 실행 if macchanger --help > /dev/null; then하면 macchanger설치되어 있는지 확인 합니까?
익명의

@KeeganKuhn 성공 macchanger하면 현재 쉘의 $PATH. 실패하면 PATH에서 사용할 수 없거나 설치되지 않습니다.
Holger Just

2
@Keegan Kuhn-응용 프로그램이 PATH에 있는지 확인하려면 (실행하지 않고) which -s. -s옵션 (자동)는으로 "어떤 출력을 -s없는 아무 것도 발견되지 않으면, 단지 1을 실행 파일 중 하나가 발견되면 0을 반환하거나."설명되어 있습니다 적절한 사용은 같은 것입니다which macchanger || echo "macchanger not on PATH"
제프리 아길레라

7

이건 어떤가요?

for pkg in macvim ngrep other needed packages; do
    if brew list -1 | grep -q "^${pkg}\$"; then
        echo "Package '$pkg' is installed"
    else
        echo "Package '$pkg' is not installed"
    fi
done

귀하의 솔루션은 .csv python@3로 설치되고 나열된 것과 같은 일부 버전이 지정된 공식에서 작동하지 않습니다 python3.
Daniele Orlando

1
# install if we haven't installed any version
brew ls --versions $lib || brew install $lib
# install if we haven't installed latest version
brew outdated $lib || brew install $lib

1

가장 쉬운 2 줄 : 1 단계, 설치되었는지 확인

$ realpath . || brew install coreutils

이것은 현재 디렉토리의 실제 경로를 인쇄하고 그렇지 않은 경우이를 설치합니다. 그리고 실제 경로를 찾을 수 없어도 실패하지 않습니다.

2 단계, 실제 코드에서 호출합니다.

$ realpath ${someDir}

이것은 특정 도구에 대한 쉬운 솔루션입니다. 일반적인 솔루션이 아닙니다.
iltempo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.