Unix как определить, может ли программа быть выполнена

Unix как определить, может ли программа быть выполнена

Я пишу скрипт для создания исходной среды. Обработать часть PATH легко. Но как мне проверить, может ли программа быть выполнена правильно, если ее путь добавлен в PATH? Использование whichнедостаточно, поскольку оно только проверяет существование исполняемого файла, а не запускает его. Теперь мне нужно проверить версию программы (т. е. find -version) и проверить, содержит ли возвращаемое сообщение " command not found". Это не идеально. Есть ли лучший способ сделать это?

решение1

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

Одна вещь, которую вы можете сделать, это попробовать запустить программу и вместо того, чтобы искать определенный текст в самой программе, посмотреть на переменную $?. Это возвращает статус выхода программы (обычно 0 для OK) или (в системе CentoOS, с которой я имею дело) 127 для файла, не найденного, например

find --version
if [[ $? == 127 ]]
then
    exit 1
fi

Причина, по которой не существует идеального способа, заключается в том, что статус выхода 0 для OK является общепринятым, и программы могут возвращать другой статус выхода, если они выполняются, но сталкиваются с ошибкой. Это может работать для вас, пока что-то не запустится и не вернет статус выхода 127, чтобы указать на некоторую ошибку.

решение2

Вы можете использовать-x оператордля проверки, установлен ли флаг исполняемого файла для файла. Однако он не сообщает вам, будет ли исполняемый файл запущен на самом деле.

Связанный контент