Como verificar se o busybox tem um comando?

0

No meu caso, quero ver se o busybox tem o "md5sum" embutido.

Atualmente estou fazendo isso:

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

Eu não consegui encontrar nenhuma informação sobre se há algo embutido no busybox para consultar quais recursos estão disponíveis de forma programática.

Sim, posso listar os applets disponíveis executando-os sem argumentos, mas tentar usar a saída seria propenso a erros e não há garantia de que o grep esteja disponível.

    
por Zhro 29.10.2014 / 23:43

2 respostas

1

Obrigado pelo empurrão, Micah. Isso fez minha criatividade fluir.

Atualizado:

Testado no Bash 3/4, todos internos, sem impedimentos:

Portabilidade: 100% compatível apenas com Bash 3 e 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
}

Não há bashisms testados no Dash:

Portabilidade: Portátil em todas as partes com 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
}

Não há bashisms, grep -e em vez de egrep (mais portável), testados no Dash:

Portabilidade: portátil em todos os sh com 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
}

Para testar:

_busybox_has md5sum && echo yes || echo no
    
por 30.10.2014 / 00:53
0

Se eu digitar # busybox sem parâmetros, recebo uma lista de comandos configurados possíveis.

Dependendo do seu ambiente, você poderá analisar essa sequência. Grep é mencionado, mas faltando essa opção, eu o abordaria através das ferramentas de análise de string do meu ambiente:

bash:

options=$('busybox');

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

se você estiver usando outro idioma, geralmente há algo apropriado.

    
por 30.10.2014 / 00:01