Есть несколько близких кандидатов на этот вопрос, на которые уже дан ответ, и я попробовал несколько способов решить проблему.В частности, мой сценарий таков:
У меня есть массив имен утилит, которые могут или не могут быть установлены на Linux-машине (например, ssh, sudo и т. Д.), Поэтому я пытаюсь проверить,Утилита существует или не основана на результате попытки вызова утилит по очереди.Я пытаюсь сделать это в Bash.Версия Bash - 4.1.5 (1), работающая на Ubuntu 10.10, но планируемая для развертывания на BusyBox.
Если утилита не существует, то обычно вы получаете сообщение «не найден» или оно точнострока.В противном случае вы получите сообщение об использовании.Я пробовал некоторые выражения регулярных выражений для используемого мной grep, но это не имело никакого значения, что заставляет меня поверить, что в моем коде есть что-то более фундаментальное с недостатками.
Я полностью осознаю, что есть утилиты, которыесделать это, но в среде, в которой я работаю, у меня нет доступа к таким вещам, как dpkg, для проверки утилит / пакетов.Короче говоря, среда, в которой я планирую развернуть это, НЕ БУДЕТ УПРАВЛЯТЬ ПАКЕТАМИ.
То, что у меня есть, примерно так:
#!/bin/bash
TOOLS=( 'ssh' 'soodo' 'dhclient' 'iperf')
#list of tools is abridged for convenience and added 'soodo' as a sure miss
#add a ridiculous option flag so don't accidentally trip any real flags
if `echo ${TOOLS[0]} -222222 | grep -q "not found"`; then
echo "${TOOLS[0]} is not installed."
else echo `${TOOLS[0]} --version`
#I am aware that --version is not applicable for all utilities, but this is just
#for sake of example.
Моя проблема в том, что если никогда не кажется точнымвзял.Если я покручиваю знаки `вокруг него, то это создает либо ложные срабатывания, либо ложные отрицания в if (например: программа, подобная soodo, будет объявлена существующей, когда ее нет, а что-то вроде ssh будет сообщено, что она не установлена, даже если она есть).
Если вам, ребята, нужны какие-то дополнительные разъяснения относительно того, что я пытаюсь сделать или что-то подобное, пожалуйста, спросите.Это самое малое, что я могу предоставить в обмен на понимание других.