Проверка установленности программ

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
Liksys
Сообщения: 2910

Проверка установленности программ

Сообщение Liksys »

Нужно для сценария проверять, установлена ли программа ХХХ. Как это можно сделать простыми командами? Решения типа rpm -qa | grep XXX не предлагать, нужно, чтобы работало на всех никсах, включая БСД и прочие.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

Liksys писал(а):
19.07.2006 16:49
Как это можно сделать простыми командами?


if [ -x /path/XXX ] ; then...

или which XXX


И см. любой скрипт configure.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

serzh-z писал(а):
19.07.2006 17:01
Liksys писал(а):
19.07.2006 16:49

Как это можно сделать простыми командами?


if [ -x /path/XXX ] ; then...

или which XXX


И см. любой скрипт configure.


Первое не пойдет, имя каталога не известно. Второе ищет только по PATH, что подходит. но не совсем. Если пользователь запускает скрипт, а прога находится в каталоге, скажем, /sbin, и при этом в паше пользователя этого катагога нет, то он его не найдет.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

Liksys писал(а):
19.07.2006 17:05
Второе ищет только по PATH, что подходит. но не совсем. Если пользователь запускает скрипт, а прога находится в каталоге, скажем, /sbin, и при этом в паше пользователя этого катагога нет, то он его не найдет.
А разве это не показатель "установленности" программы? А если пользователь установил две версии приложения, и хочет чтобы была доступна одна из них - вероятно, он поместит в PATH лишь каталог с той версией, которая ему нужна.

Если нет sbin в PATH, то вероятно для ЭТОГО пользователя приложение "как-бы" не установлено.

Вообще, если немного поразмыслить, то легко можно осознать всю безграничную абсурдность этой задачи (на всех никсах; универсальное; причём такое, которое идёт в разрез с идеологией UNIX).

На крайний случай, если так надо - можно и find использовать.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

serzh-z писал(а):
19.07.2006 17:23
Liksys писал(а):
19.07.2006 17:05

Второе ищет только по PATH, что подходит. но не совсем. Если пользователь запускает скрипт, а прога находится в каталоге, скажем, /sbin, и при этом в паше пользователя этого катагога нет, то он его не найдет.
А разве это не показатель "установленности" программы? А если пользователь установил две версии приложения, и хочет чтобы была доступна одна из них - вероятно, он поместит в PATH лишь каталог с той версией, которая ему нужна.

Если нет sbin в PATH, то вероятно для ЭТОГО пользователя приложение "как-бы" не установлено.

Вообще, если немного поразмыслить, то легко можно осознать всю безграничную абсурдность этой задачи (на всех никсах; универсальное; причём такое, которое идёт в разрез с идеологией UNIX).

На крайний случай, если так надо - можно и find использовать.

Вот последний вариант меня и интересует. Я сделал, но скрипт получилася громоздким. Как можно сделать что-то простое?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

#!/bin/sh

find myfprog
is_not_found=$?


Это громоздко?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

serzh-z писал(а):
19.07.2006 17:38
#!/bin/sh

find myfprog
is_not_found=$?


Это громоздко?

Странно, ну почему- то у меня подобная фича не катит. Кстати, файнд имеет какое- то специфическое фозвращаемое значение. У меня он ничего не нашел, а возвратил 130
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

Liksys писал(а):
19.07.2006 18:24
У меня он ничего не нашел, а возвратил 130
Код ошибки. 0 - это успех.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

serzh-z писал(а):
19.07.2006 18:33
Liksys писал(а):
19.07.2006 18:24

У меня он ничего не нашел, а возвратил 130
Код ошибки. 0 - это успех.

Я знаю, что 0 это успех. Но если ничего не найдено - тоже успех <_<
Спасибо сказали:
Аватара пользователя
Skull
Модератор
Сообщения: 2089
ОС: ALT Linux

Re: Проверка установленности программ

Сообщение Skull »

Liksys писал(а):
19.07.2006 16:49
Нужно для сценария проверять, установлена ли программа ХХХ. Как это можно сделать простыми командами? Решения типа rpm -qa | grep XXX не предлагать, нужно, чтобы работало на всех никсах, включая БСД и прочие.
which program ?
Skull
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

Skull писал(а):
20.07.2006 12:29
which program ?
http://linuxforum.ru/index.php?act=findpost&pid=230654
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

Skull писал(а):
20.07.2006 12:29
Liksys писал(а):
19.07.2006 16:49

Нужно для сценария проверять, установлена ли программа ХХХ. Как это можно сделать простыми командами? Решения типа rpm -qa | grep XXX не предлагать, нужно, чтобы работало на всех никсах, включая БСД и прочие.
which program ?

нет, почему - написано выше. Может кто - нить знает решение?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

Liksys писал(а):
20.07.2006 12:48
Может кто - нить знает решение?
Вроде бы уже все подходящие решения предложили. Сам подумай - какое ещё может быть кросплатформенное решение, для систем UNIX, у которых нет общего пакетного менеджера и стандартного списка установленных/собранных вручную пакетов. Или "надежда умирает последней"?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

serzh-z писал(а):
20.07.2006 13:25
Liksys писал(а):
20.07.2006 12:48

Может кто - нить знает решение?
Вроде бы уже все подходящие решения предложили. Сам подумай - какое ещё может быть кросплатформенное решение, для систем UNIX, у которых нет общего пакетного менеджера и стандартного списка установленных/собранных вручную пакетов. Или "надежда умирает последней"?

мне больше всего понравилось решение с файндом, но к сожалению оно как-то странно работает.
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: Проверка установленности программ

Сообщение aLexx programmer »

(Liksys @ Jul 20 2006, в 13:29) писал(а):но к сожалению оно как-то странно работает.

И очень долго.
Ведь программа может быть установлена куда угодно... Значит, надо искать по всему диску :) И по всем примонтированным :D
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

aLexx programmer писал(а):
20.07.2006 18:30
(Liksys @ Jul 20 2006, в 13:29) писал(а):
но к сожалению оно как-то странно работает.

И очень долго.
Ведь программа может быть установлена куда угодно... Значит, надо искать по всему диску :) И по всем примонтированным :D

Точно. Ну же, предложите способ! У меня была идея делать так:

Код: Выделить всё

#!/bin/bash
XXX --help
if [ $? -ne 0 ]; then
     echo "XXX is not installed"
fi

Это работает, баш устанавливает значение $? не равнум нулю, если не нашел такой команды.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Проверка установленности программ

Сообщение elide »

хм... а если такая программа нашлась, но она просто не понимает опции --help, а в случае получения неизвестной опции взвращает код ошибки? кроме того, а чем это отличается от which? твой код тоже ищет программу при запуске только в текущем PATH...... кроме того, я теперь понял, почему у ты жалуешься на громоздкие варианты - потому что пишешь 4 строчки вместо одной

Код: Выделить всё

XXX --help || echo "XXX is not installed"
которая делает абсолютно то же самое...

вообще, в этом топике ты производишь впечатление очень глупого человека. ты поставил изначально некорректное условие, но даже после того, как тебе предложили несколько вариантов решения этой некорректной задачи, ты продолжаешь кричать "Ну же, предложите способ!"
какой еще нахрен способ тебе нужен, а? может все-таки подумаешь головой?
слава роботам!
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

elide писал(а):
21.07.2006 11:18
хм... а если такая программа нашлась, но она просто не понимает опции --help, а в случае получения неизвестной опции взвращает код ошибки? кроме того, а чем это отличается от which? твой код тоже ищет программу при запуске только в текущем PATH...... кроме того, я теперь понял, почему у ты жалуешься на громоздкие варианты - потому что пишешь 4 строчки вместо одной

Код: Выделить всё

XXX --help || echo "XXX is not installed"
которая делает абсолютно то же самое...

вообще, в этом топике ты производишь впечатление очень глупого человека. ты поставил изначально некорректное условие, но даже после того, как тебе предложили несколько вариантов решения этой некорректной задачи, ты продолжаешь кричать "Ну же, предложите способ!"
какой еще нахрен способ тебе нужен, а? может все-таки подумаешь головой?

Я не жалуюсь на громоздкость решения, сдесь я привел пример того, как это реализовавается подробно. Я использовал if для тех, кто может подсказать хорошее решение, но не силен в логических операциях, что не редкость. Тем более, что та программа, установленность которой нужно проверять, содержит опцию --help. Громоздкость решения получалась даже не с ифом, а с реализацией через find :angry:

И не стоит оскорблять людей, если тебе не понятен смысл задачи. Да и вопрос изначально был сформулирован правильно. Я хочу определить наиболее быстрый и универсальный из предложенных, поэтому "продолжаю кричать".

В чем я действительно не прав - это про PATH. Надо проверять в нем, поэтому решение с which подходит.

И если кто-то знает интересные способы решения этой задачи, пожалуйста, напишите.

elide писал(а):
21.07.2006 11:18
какой еще нахрен способ тебе нужен, а? может все-таки подумаешь головой?

Кстати, хотелось бы без выражений.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

Liksys писал(а):
21.07.2006 12:00
Я хочу определить наиболее быстрый и универсальный из предложенных, поэтому "продолжаю кричать".
...
И если кто-то знает интересные способы решения этой задачи, пожалуйста, напишите.
Наверное ты себя недооцениваешь - ведь сам понимаешь, что добрая фея-мегамозг, которая знает, что-то важное, чего бы ты сам уже не понял, здесь не появится.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

serzh-z писал(а):
21.07.2006 12:37
Liksys писал(а):
21.07.2006 12:00

Я хочу определить наиболее быстрый и универсальный из предложенных, поэтому "продолжаю кричать".
...
И если кто-то знает интересные способы решения этой задачи, пожалуйста, напишите.
Наверное ты себя недооцениваешь - ведь сам понимаешь, что добрая фея-мегамозг, которая знает, что-то важное, чего бы ты сам уже не понял, здесь не появится.

Наверно... ^_^ Я в конце концов остановился на реализации с which:

Код: Выделить всё

#!/bin/bash
which XXX > /dev/null
if [ $? -ne 0 ]; then
     echo "XXX is not installed"
else
     echo "OK"
fi


Продолжаю уже просто из интереса, какие еще способы можно придумать.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Проверка установленности программ

Сообщение serzh-z »

Liksys писал(а):
21.07.2006 12:42
какие еще способы можно придумать.
Ну например заменить -ne на -eq: :lol:

Код: Выделить всё

if [ $? -eq 0 ]; then
     echo "OK"
else
     echo "XXX is not installed"
fi
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Проверка установленности программ

Сообщение Liksys »

Класс! :D Еще можешь придумать?
Спасибо сказали:
Аватара пользователя
Skull
Модератор
Сообщения: 2089
ОС: ALT Linux

Re: Проверка установленности программ

Сообщение Skull »

Liksys писал(а):
21.07.2006 10:57

Код: Выделить всё

#!/bin/bash
XXX --help
if [ $? -ne 0 ]; then
     echo "XXX is not installed"
fi
Ну тогда нафига было на which наезжать? То же самое делает, только через одно место... :)
Skull
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Проверка установленности программ

Сообщение t.t »

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