Tôi có một yêu cầu đơn giản. Tôi muốn xác định một số biến sẽ tương ứng với bất kỳ số lượng gói nhất định nào tôi muốn cài đặt thông qua tập lệnh shell.
Mã mẫu dưới đây:
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
Mọi thứ đều hoạt động, nhưng logic có vẻ không hoàn hảo vì nó không đáng tin cậy để cài đặt các gói tôi muốn. Nó cũng nói rằng họ đã được cài đặt hoặc đang cố cài đặt các gói đã được cài đặt trước đó.
Tôi cũng đã từng thử command -v
hoặc sau:
if [ "dpkg -l | awk {'print $2'} | grep --regexp=^$pkg$ != """ ]; then
Và thậm chí với các cờ -n
và -z
để kiểm tra xem chuỗi trả về có trống không. Khá chắc chắn rằng tôi đang thiếu một số ý nghĩa tốt ở đây.
Bạn có biết tôi có thể làm gì để đảm bảo một gói thực sự được cài đặt hay không?
Cảm ơn!
apt-get install
cho các gói cài đặt, quá? Bạn chỉ có thể gọiapt-get install $MISC $WEB
.