
No meu caso, quero ver se o busybox possui "md5sum" integrado.
Atualmente estou fazendo isso:
$ echo | busybox md5sum &>/dev/null && echo yes || echo no
Não consegui encontrar nenhuma informação sobre se há algo embutido no busybox para consultar quais recursos estão disponíveis programaticamente.
Sim, posso listar os miniaplicativos disponíveis executando-os sem argumentos, mas tentar executar o grep na saída seria propenso a erros e não há garantia se o grep estará disponível.
Responder1
Obrigado pelo empurrão, Micah. Isso fez minha criatividade fluir.
Atualizada:
Testado no Bash 3/4, todos integrados, sem dependências:
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
}
Sem bashismos, testado no Dash:
Portabilidade: Portátil em todos os sh com sed/egrep
_busybox_has() {
busybox >/dev/null 2>&1 ||
return 1
# Sanitize searches for '[' and '[['
a=$(echo "$1" | sed 's/[[]/\\[/g')
busybox | egrep -oq "[[:space:]]($a)([,]|$)" ||
return 1
}
Sem bashismos, grep -e em vez de egrep (mais portátil), testado no Dash:
Portabilidade: Portátil em todos os sh com sed/grep -e
_busybox_has() {
busybox >/dev/null 2>&1 ||
return 1
# Sanitize searches for '[' and '[['
a=$(echo "$1" | sed 's/[[]/\\[/g')
busybox | grep -oqe "[[:space:]]\($a\)\([,]\|\$\)" ||
return 1
}
Testar:
_busybox_has md5sum && echo yes || echo no
Responder2
Se eu digitar # busybox
sem parâmetros, recebo uma lista de comandos configurados possíveis.
Dependendo do seu ambiente, você poderá analisar essa string. Grep é mencionado, mas na falta dessa opção, eu o abordaria por meio das ferramentas de análise de strings do meu ambiente:
festa:
options=$('busybox');
if [[ $options == *command* ]]
then
echo "It's there!";
fi
se você estiver usando outro idioma, geralmente há algo apropriado.
Responder3
busybox --list | busybox grep -qF md5sum && echo yes || echo no
(Testado com Busybox v1.35.0 no Debian 12.)
Uma função shell que implementa a solução acima:
_busybox_has () { busybox --list | busybox grep -qxF "$1"; }
Uso:
_busybox_has md5sum && echo yes || echo no
_busybox_has kitchensink && echo yes || echo no
não há garantia se
grep
estará disponível
grep
é tão útil que seria uma peculiaridade não tê-lo. Por precaução, a seguinte função shell implementa _busybox_has
o uso de just busybox --list
e recursos do POSIX sh
(nem par [
):
_busybox_has () {
busybox --list | ( while IFS= read -r line; do
case "$line" in
"$1") return 0
;;
esac
done
return 1 )
}