Chciałbym napisać skrypt instalacyjny bash, w którym chciałbym zainstalować serwer MySQL.
W Linux Mint śledziłem kod:
apt-get -y --force-yes install mysql-server-5.6
ale zainstalowałem nowy Debian 8 i nie ma mysql-server
- zamiast tego jest mariadb
.
Jak mogę sprawdzić, czy pakiet istnieje?
Wiem tylko, że jest to, dpkg -s
co powinno powiedzieć, czy pakiet jest zainstalowany.
--force-yes
dezaktywuje wszystkie zabezpieczenia, więc naprawdę możesz zepsuć system do punktu, w którym nie będzie żadnej naprawy. Ponadto:--force-yes
zastępuje (dezaktywuje)-y
. gdzie ta ostatnia może być opcją wyboru: Długa forma-y
jest--assume-yes
i właśnie to robi; Mówienie „tak”, aż stanie się naprawdę brzydkie, z ryzykowaniem spustoszenia wśród podstawowych elementów, podstaw itp.--force
Zastępuje złamanie zabezpieczeń (nauczyłem się tego na--simulate
opcjaapt-get
zrobienia--dry-run
, na wszelki wypadek/etc/apt/sources.list
, prawda?Odpowiedzi:
(poniżej pochodzi z Ubuntu, ale ta sama technika oczywiście działa również na Debianie)
Jeśli pakiet istnieje, zostaną wyświetlone informacje. Jeśli nie, zobaczysz coś takiego:
Dodatkowo kod wyjścia
apt-cache
będzie niezerowy, jeśli nie zostaną znalezione pasujące pakiety.Dodatkowa uwaga: jeśli używasz, gdy
apt-cache show package
pakiet jest pakietem wirtualnym (taki, który nie istnieje, ale na przykład jest do niego odwoływany przez inne pakiety), otrzymasz:Jest
exit code
to zero (co moim zdaniem jest nieco mylące).źródło
sources.list
tym poleceniem:apt-cache search *searchstring*
. To polecenie przeszuka również opis pakietów i może pomóc ci znaleźć pakiety, w których nie znasz dokładnej nazwy pakietu.apt-cache search ...
zwraca tylko dowolne dopasowania i aplikację. zwraca 0, nawet jeśli nic nie zostanie znalezione, co nie jest praktyczne w skrypcie bash.Chciałbym użyć
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
.Sprawdzi, czy
mysql-server
pakiet jest zainstalowany, a jeśli tak, wydrukuje ten fakt na ekranie. Bardziej wyrafinowanym rozwiązaniem byłoby bash (nieprzetestowane):Można więc zrobić w skrypcie:
źródło
W jednej linijce:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
wychodzi z 0, jeśli jest obecna, 1 jeśli nie.
Premia: skuteczne sprawdzenie wielu pakietów, wymienionych w pliku „packages_we_want”, po jednym w wierszu, posortowanych według
sort
:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
wyświetla listę wszystkich pakietów, które chcesz, ale nie istnieją w repozytoriach.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
wyświetla wszystkie pakiety, które chcesz i istnieją w repozytoriach.źródło