Проверка установленности программ
Модератор: Bizdelnick
-
- Сообщения: 2910
Проверка установленности программ
Нужно для сценария проверять, установлена ли программа ХХХ. Как это можно сделать простыми командами? Решения типа rpm -qa | grep XXX не предлагать, нужно, чтобы работало на всех никсах, включая БСД и прочие.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
- Сообщения: 2910
Re: Проверка установленности программ
Первое не пойдет, имя каталога не известно. Второе ищет только по PATH, что подходит. но не совсем. Если пользователь запускает скрипт, а прога находится в каталоге, скажем, /sbin, и при этом в паше пользователя этого катагога нет, то он его не найдет.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Проверка установленности программ
А разве это не показатель "установленности" программы? А если пользователь установил две версии приложения, и хочет чтобы была доступна одна из них - вероятно, он поместит в PATH лишь каталог с той версией, которая ему нужна.
Если нет sbin в PATH, то вероятно для ЭТОГО пользователя приложение "как-бы" не установлено.
Вообще, если немного поразмыслить, то легко можно осознать всю безграничную абсурдность этой задачи (на всех никсах; универсальное; причём такое, которое идёт в разрез с идеологией UNIX).
На крайний случай, если так надо - можно и find использовать.
-
- Сообщения: 2910
Re: Проверка установленности программ
serzh-z писал(а): ↑19.07.2006 17:23А разве это не показатель "установленности" программы? А если пользователь установил две версии приложения, и хочет чтобы была доступна одна из них - вероятно, он поместит в PATH лишь каталог с той версией, которая ему нужна.
Если нет sbin в PATH, то вероятно для ЭТОГО пользователя приложение "как-бы" не установлено.
Вообще, если немного поразмыслить, то легко можно осознать всю безграничную абсурдность этой задачи (на всех никсах; универсальное; причём такое, которое идёт в разрез с идеологией UNIX).
На крайний случай, если так надо - можно и find использовать.
Вот последний вариант меня и интересует. Я сделал, но скрипт получилася громоздким. Как можно сделать что-то простое?
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Проверка установленности программ
#!/bin/sh
find myfprog
is_not_found=$?
Это громоздко?
-
- Сообщения: 2910
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
- Сообщения: 2910
-
- Модератор
- Сообщения: 2089
- ОС: ALT Linux
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
- Сообщения: 2910
Re: Проверка установленности программ
нет, почему - написано выше. Может кто - нить знает решение?
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Проверка установленности программ
Вроде бы уже все подходящие решения предложили. Сам подумай - какое ещё может быть кросплатформенное решение, для систем UNIX, у которых нет общего пакетного менеджера и стандартного списка установленных/собранных вручную пакетов. Или "надежда умирает последней"?
-
- Сообщения: 2910
Re: Проверка установленности программ
мне больше всего понравилось решение с файндом, но к сожалению оно как-то странно работает.
-
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
Re: Проверка установленности программ
(Liksys @ Jul 20 2006, в 13:29) писал(а):но к сожалению оно как-то странно работает.
И очень долго.
Ведь программа может быть установлена куда угодно... Значит, надо искать по всему диску


-
- Сообщения: 2910
Re: Проверка установленности программ
aLexx programmer писал(а): ↑20.07.2006 18:30
И очень долго.
Ведь программа может быть установлена куда угодно... Значит, надо искать по всему дискуИ по всем примонтированным
Точно. Ну же, предложите способ! У меня была идея делать так:
Код: Выделить всё
#!/bin/bash
XXX --help
if [ $? -ne 0 ]; then
echo "XXX is not installed"
fi
Это работает, баш устанавливает значение $? не равнум нулю, если не нашел такой команды.
-
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Проверка установленности программ
хм... а если такая программа нашлась, но она просто не понимает опции --help, а в случае получения неизвестной опции взвращает код ошибки? кроме того, а чем это отличается от which? твой код тоже ищет программу при запуске только в текущем PATH...... кроме того, я теперь понял, почему у ты жалуешься на громоздкие варианты - потому что пишешь 4 строчки вместо одной которая делает абсолютно то же самое...
вообще, в этом топике ты производишь впечатление очень глупого человека. ты поставил изначально некорректное условие, но даже после того, как тебе предложили несколько вариантов решения этой некорректной задачи, ты продолжаешь кричать "Ну же, предложите способ!"
какой еще нахрен способ тебе нужен, а? может все-таки подумаешь головой?
Код: Выделить всё
XXX --help || echo "XXX is not installed"
вообще, в этом топике ты производишь впечатление очень глупого человека. ты поставил изначально некорректное условие, но даже после того, как тебе предложили несколько вариантов решения этой некорректной задачи, ты продолжаешь кричать "Ну же, предложите способ!"
какой еще нахрен способ тебе нужен, а? может все-таки подумаешь головой?
слава роботам!
-
- Сообщения: 2910
Re: Проверка установленности программ
elide писал(а): ↑21.07.2006 11:18хм... а если такая программа нашлась, но она просто не понимает опции --help, а в случае получения неизвестной опции взвращает код ошибки? кроме того, а чем это отличается от which? твой код тоже ищет программу при запуске только в текущем PATH...... кроме того, я теперь понял, почему у ты жалуешься на громоздкие варианты - потому что пишешь 4 строчки вместо однойкоторая делает абсолютно то же самое...Код: Выделить всё
XXX --help || echo "XXX is not installed"
вообще, в этом топике ты производишь впечатление очень глупого человека. ты поставил изначально некорректное условие, но даже после того, как тебе предложили несколько вариантов решения этой некорректной задачи, ты продолжаешь кричать "Ну же, предложите способ!"
какой еще нахрен способ тебе нужен, а? может все-таки подумаешь головой?
Я не жалуюсь на громоздкость решения, сдесь я привел пример того, как это реализовавается подробно. Я использовал if для тех, кто может подсказать хорошее решение, но не силен в логических операциях, что не редкость. Тем более, что та программа, установленность которой нужно проверять, содержит опцию --help. Громоздкость решения получалась даже не с ифом, а с реализацией через find

И не стоит оскорблять людей, если тебе не понятен смысл задачи. Да и вопрос изначально был сформулирован правильно. Я хочу определить наиболее быстрый и универсальный из предложенных, поэтому "продолжаю кричать".
В чем я действительно не прав - это про PATH. Надо проверять в нем, поэтому решение с which подходит.
И если кто-то знает интересные способы решения этой задачи, пожалуйста, напишите.
Кстати, хотелось бы без выражений.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Проверка установленности программ
Наверное ты себя недооцениваешь - ведь сам понимаешь, что добрая фея-мегамозг, которая знает, что-то важное, чего бы ты сам уже не понял, здесь не появится.
-
- Сообщения: 2910
Re: Проверка установленности программ
Наверно... ^_^ Я в конце концов остановился на реализации с which:
Код: Выделить всё
#!/bin/bash
which XXX > /dev/null
if [ $? -ne 0 ]; then
echo "XXX is not installed"
else
echo "OK"
fi
Продолжаю уже просто из интереса, какие еще способы можно придумать.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Проверка установленности программ
Ну например заменить -ne на -eq: :lol:
Код: Выделить всё
if [ $? -eq 0 ]; then
echo "OK"
else
echo "XXX is not installed"
fi
-
- Сообщения: 2910
Re: Проверка установленности программ
Класс!
Еще можешь придумать?

-
- Модератор
- Сообщения: 2089
- ОС: ALT Linux
Re: Проверка установленности программ
Ну тогда нафига было на which наезжать? То же самое делает, только через одно место...Liksys писал(а): ↑21.07.2006 10:57Код: Выделить всё
#!/bin/bash XXX --help if [ $? -ne 0 ]; then echo "XXX is not installed" fi

Skull
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Проверка установленности программ
Блин, да каких ещё "способов" вы хотите? Есть всего _два_ варианта решения этой задачи: либо искать бинарник искомой программы в каталогах пути, либо -- по всем дискам. Оба варианта уже озвучены: which и find. Вы знаете что-то другое? Нет? Так и никто не знает. Потому как неизвестно, как ещё ограничить область поиска кроме переменной PATH. Наперёд расположение каталогов в "любой unix-системе" неизвестно. Тот же /usr, к примеру, -- в макоси он уже не /usr, а /sw. Просто никто не может понять, чего же вы ещё хотите-то? Либо конкретизируйте вопрос, либо отстаньте.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж