Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Проверка установленных пакетов (условия if / else, проверка через dpkg)  (Прочитано 1736 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн chester_+1

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Пишу скрипт проверки установленных в системе пакетов, нужно удалить мусор в сообщении.

PACKAGE="gedit"
if eval "sudo dpkg -s $PACKAGE>/dev/null"
then
echo ""
echo "\033[37;1;42m Успех! Пакет '$PACKAGE' установлен в системе. \033[0m"
echo ""
else
echo ""
echo "\033[37;1;40m Ошибка! Пакет '$PACKAGE' не установлен в системе. \033[0m"
echo ""
fi

PACKAGE="tratata"
if eval "sudo dpkg -s $PACKAGE>/dev/null"
then
echo ""
echo "\033[37;1;42m Успех! Пакет '$PACKAGE' установлен в системе. \033[0m"
echo ""
else
echo ""
echo "\033[37;1;40m Ошибка! Пакет '$PACKAGE' не установлен в системе. \033[0m"
echo ""
fi

Когда пакет в системе есть, все работает должным образом - выводится цветное сообщение об успехе. В последнем варианте выдается сообщение об ошибке, ввиду отсутствия пакета. Вместе с этим сыпется мусор, который мне хотелось бы убрать.

Помогите разобраться )

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Навскидку:
if eval "sudo dpkg -s $PACKAGE>/dev/null 2>&1"

Оффлайн Сперанский

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля
Навскидку:
if eval "sudo dpkg -s $PACKAGE>/dev/null 2>&1"
Стало интересно, проверил- работает.
А поясните значение последних 4 символов?

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Любое приложение на самом деле выдаёт два разных потока текста — обычный выхлоп (1) и ошибки (2). По умолчанию они валятся в терминал. ТС дописал ">/dev/null", это всё равно что "1>/dev/null", т. е. "отправляй выхлоп в никуда". Приэтом ошибки продолжают выводиться в консоль.

Последние 4 символа как бы говорят башу "отправляй 2 (ошибки) туда же, куда и 1".

В винде, кстати, так же.

Оффлайн Сперанский

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля

Оффлайн chester_+1

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Спасибо, действительно работает!

Оффлайн Kachalkin

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Навскидку:
if eval "sudo dpkg -s $PACKAGE>/dev/null 2>&1"
Вчера тестил немного калькулейт линукс, у них есть команда исполняемая в консоли для проверки
идентификации установленных пакетов. проверка идёт с серверами.
меня заинтересовал такой момент, как такую проверку выполнить в Ubuntu?

Оффлайн Tolik_

  • Активист
  • *
  • Сообщений: 335
    • Просмотр профиля
Может не так красиво, но у меня в моем скрипте отдельная функция для проверки
# Проверка - установлен ли пакет
function checkPKGinst()
{
if [ -z "$1" ];then
 echo "Аргумент ф-ии {checkPKGinst} имеет нулевую длину."
 return $ERROR
fi
pkgStatus=`dpkg --status $1 2>&1`
# как альтернатива - возврат кода завершения нижеприведенной команды
# при [ $? -eq 1 ] - пакет не установлен
StatusPKG=`echo "$pkgStatus" | grep "Status: install" | sed -e 's/Status: install //g' |  cut -c1-2`  # > /dev/null 2>&1
if [[ "$StatusPKG" = "ok" ]];then
   # Установлен
   return $TRUE
else
   return $FALSE
fi
}
Возврат ф-ции используется основным скриптом для принятия решения...

 

Страница сгенерирована за 0.052 секунд. Запросов: 25.