Узнайте, существует ли команда в системе POSIX

Я хочу смочь сказать, существует ли команда в какой-либо системе POSIX из сценария оболочки.

На Linux я могу сделать следующее:

if which ; then
   ...snip...
fi

Однако Солярис и MacOS which не давайте код неисправности выхода, когда команда не существует, они просто печатают сообщение об ошибке к STDOUT.

Кроме того, я недавно обнаружил что which самой командой не является POSIX (см. http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html),

Какие-либо идеи?

16
задан tripleee 3 August 2019 в 07:50
поделиться

3 ответа

команда -v - это указанная POSIX команда, которая делает то, что делает.

Она определена для возвращать> 0, если команда не найдена или возникает ошибка.

22
ответ дан 30 November 2019 в 21:46
поделиться

Вы можете прочитать stdout / stderr из «which» в переменную или массив (используя обратные метки) вместо проверки для кода выхода.

Если в системе нет команды «который» или «где», вы также можете получить содержимое переменной $ PATH, а затем перебрать все каталоги и найти заданный исполняемый файл. Это, по сути, то, что делает (хотя может использовать некоторое кэширование / оптимизацию результатов $ PATH).

0
ответ дан 30 November 2019 в 21:46
поделиться

POSIX говорит: « Если команда не найдено, выходное состояние должно быть 127. »Так что вы можете сделать

<command>
if [ "${?}" = 127 ]; then
   <handle not found>
fi

При написании сценариев оболочки часто допустимо требовать оболочки bash ( #! / bin / bash ), потому что без Массивы практически невозможно правильно обрабатывать аргументы и / или имена файлов с пробелами.

2
ответ дан 30 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: