У меня есть простое требование. Я хочу определить несколько переменных, которые будут соответствовать любому количеству заданных пакетов, которые я хочу установить через скрипт оболочки.
Пример кода ниже:
MISC="shutter pidgin"
WEB="apache2 mongodb"
for pkg in $MISC $WEB; do
if [ "dpkg-query -W $pkg | awk {'print $1'} = """ ]; then
echo -e "$pkg is already installed"
else
apt-get -qq install $pkg
echo "Successfully installed $pkg"
fi
done
Все вроде работает, но логика кажется ошибочной, потому что она не надежно устанавливает нужные мне пакеты. Он либо говорит, что они уже установлены, либо пытается установить пакеты, которые уже были установлены ранее.
Я также пытался с command -v
или следующее:
if [ "dpkg -l | awk {'print $2'} | grep --regexp=^$pkg$ != """ ]; then
И даже с -n
и -z
флажками , чтобы проверить , если возвращаемая строка была пуста. Уверен, мне здесь не хватает здравого смысла.
Есть ли у вас какие-либо идеи, чтобы я мог убедиться, что пакет действительно установлен или нет?
Благодарность!
apt-get install
установленные пакеты? Вы могли бы просто позвонитьapt-get install $MISC $WEB
.