Unix, как определить, можно ли выполнить программу
Я пишу скрипт для создания исходной среды. Работать с частью PATH легко. Хотя как мне проверить, может ли программа выполняться правильно, когда ее путь добавлен в PATH? С помощью which
недостаточно, так как нужно только проверять наличие исполняемого файла, а не запускать его. Что я получил сейчас, чтобы проверить версию программы (т.е. find -version
) и проверьте, содержит ли ответное сообщениеcommand not found
". Это не идеально. Есть ли лучший способ сделать это?
2 ответа
Я не думаю, что есть идеальный способ сделать то, что вы хотите. Как говорит Мартин, вы можете проверить, установлен ли исполняемый бит, но это не будет подтверждать, что он действительно будет работать.
Одна вещь, которую вы можете сделать, это попробовать запустить программу и вместо того, чтобы искать конкретный текст в самой программе, посмотрите на $?
переменная. Это возвращает статус завершения программы (обычно 0 для ОК) или (в системе CentoOS, которую я должен передать) 127 для файла, который не найден, например
find --version
if [[ $? == 127 ]]
then
exit 1
fi
Причина, по которой нет идеального способа, состоит в том, что состояние выхода 0 для OK является только условным, и программы могут возвращать другое состояние выхода, если они работают, но сталкиваются с ошибкой. Это может работать для вас, пока что-то не запустится и не вернет состояние выхода 127, чтобы указать на какое-то состояние ошибки
Вы можете использовать -x
оператор, чтобы проверить, установлен ли исполняемый флаг в файле. Это не говорит вам, если исполняемый файл действительно будет работать, хотя.