В моем случае я хочу посмотреть, есть ли в busybox встроенная команда "md5sum".

В настоящее время я делаю это:

$ echo | busybox md5sum &>/dev/null && echo yes || echo no

Я не смог найти никакой информации о том, есть ли что-то встроенное в busybox, чтобы узнать, какие функции доступны программно.

Да, я могу перечислить доступные апплеты, запустив его без аргументов, но попытка получить вывод grep будет подвержена ошибкам, и нет никакой гарантии относительно того, будет ли доступен grep.

2 ответа2

1

Спасибо за толчок, Мика. Это заставило мои творческие соки течь.

Обновлено:

Протестировано на Bash 3/4, все встроенные, без зависимостей:

Портативность: 100% совместимость только с Bash 3 и Bash 4

function _busybox_has() {
   builtin command -v busybox >/dev/null ||
      return 1

   # Sanitize searches for '[' and '[['
   a=$1
   a=${a//[/\\[}

   [[ $(busybox) =~ [[:space:]]($a)([,]|$) ]] ||
     return 1
}

Нет ошибок, проверено на Dash:

Портативность: Портативная на всех ш с sed/egrep

_busybox_has() {
   busybox 2>/dev/null >/dev/null ||
      return 1

   # Sanitize searches for '[' and '[['
   a=$(echo $1 | sed 's/[[]/\\[/g')

   busybox | egrep -oq "[[:space:]]($a)([,]|$)" ||
      return 1
}

Нет ошибок, grep -e вместо egrep (более переносимый), протестировано на Dash:

Портативность: Портативная на всех ш с sed/grep -e

_busybox_has() {
   busybox 2>/dev/null >/dev/null ||
      return 1

   # Sanitize searches for '[' and '[['
   a=$(echo $1 | sed 's/[[]/\\[/g')

   busybox | grep -oqe "[[:space:]]\($a\)\([,]\|\$\)" ||
      return 1
}

Тестировать:

_busybox_has md5sum && echo yes || echo no
1

Если я # busybox без параметров, я получу список настроенных команд, которые возможны.

В зависимости от вашей среды вы можете затем проанализировать эту строку. Упоминается Grep, но без этой опции я бы подошел к ней через инструменты разбора строк моей среды:

Баш:

options=$('busybox');

if [[ $options == *command* ]]
then
  echo "It's there!";
fi

если вы используете другой язык, обычно есть что-то подходящее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .