Визначте, чи встановлений пакунок з домашньою мовою


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. заварити сторінку людини ; хотів би дати це як відповідь
166_MMX

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

Відповіді:


164

Можна використовувати

brew ls --versions myformula

вивести встановлені версії відповідної формули. Якщо формула не встановлена, вихід буде порожнім.

Використовуючи останні версії домашньої кави, які ви можете отримати brew update, ви можете просто запустити це (спасибі Slaven):

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

Однак це, мабуть, гарна ідея взагалі перевірити наявність цього інструменту, а не просто перевірити відповідний пакет домашнього перекладу (наприклад, шукати виконуваний файл у програмі $PATH). Люди, як правило, встановлюють інструменти досить великою кількістю способів на практиці, причому домашня мова є лише одним із них.


6
Оскільки github.com/Homebrew/brew/commit/… достатньо перевірити код виходу: якщо формула не встановлена, то повертається false (1).
Славен Резич

Тож якщо я запускаю if macchanger --help > /dev/null; then, чи перевірять, чи macchangerвстановлено?
анонімний

@KeeganKuhn Якщо це вдалося, то macchangerзнаходиться в поточній оболонці $PATH. Якщо вона не вдається, вона або недоступна в PATH, або не встановлена.
Холгер Якраз

2
@Keegan Kuhn - Якщо ви дійсно хочете перевірити, чи є програма на PATH (не запускаючи її), ви можете використовувати which -s. -sВаріант (мовчання) документований як «Не -s Немає виходу, просто повертає 0 , якщо будь-який з виконуваних файлів будуть знайдені, або 1 , якщо нічого не знайдено.» Правильне використання - це щось на кшталт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

Ваші рішення не працюють з певною формулою, на зразок python@3якої встановлено (і перераховано) як python3.
Даніеле Орландо

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

Найпростіші два вкладиші: перший крок, переконайтеся, що він встановлений

$ realpath . || brew install coreutils

Це дозволить роздрукувати реальний шлях поточного режиму, якщо ні, то він встановить його. І не підведе, навіть realpath не знайдений.

Крок другий, зателефонуйте йому у фактичний код:

$ realpath ${someDir}

Це просте рішення для конкретного інструменту. Це не загальне рішення.
iltempo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.