Mam prosty wymóg. Chcę zdefiniować kilka zmiennych, które będą odpowiadały dowolnej liczbie podanych pakietów, które chcę zainstalować za pomocą skryptu powłoki.
Przykładowy kod poniżej:
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
Wszystko trochę działa, ale logika wydaje się wadliwa, ponieważ nie niezawodne instalowanie pakietów, których chcę. Mówi albo, że zostały już zainstalowane, albo próbuje zainstalować pakiety, które zostały już zainstalowane wcześniej.
Próbowałem również z command -v
lub następujące:
if [ "dpkg -l | awk {'print $2'} | grep --regexp=^$pkg$ != """ ]; then
A nawet z flagami -n
i, -z
aby sprawdzić, czy zwrócony ciąg był pusty. Jestem prawie pewien, że brakuje mi tutaj rozsądku.
Czy masz pojęcie, co mogę zrobić, aby upewnić się, że pakiet jest rzeczywiście zainstalowany, czy nie?
Dzięki!
apt-get install
o zainstalowane pakiety? Możesz po prostu zadzwonićapt-get install $MISC $WEB
.