
내 경우에는 busybox에 "md5sum"이 내장되어 있는지 확인하고 싶습니다.
나는 현재 이 일을 하고 있습니다:
$ echo | busybox md5sum &>/dev/null && echo yes || echo no
프로그래밍 방식으로 어떤 기능을 사용할 수 있는지 쿼리하기 위해 busybox에 내장된 것이 있는지 여부에 대한 정보를 찾을 수 없습니다.
예, 인수 없이 실행하여 사용 가능한 애플릿을 나열할 수 있지만 출력을 grep하려고 하면 오류가 발생하기 쉽고 grep을 사용할 수 있는지 여부에 대한 보장이 없습니다.
답변1
밀어붙여줘서 고마워요, 미카. 내 창의적인 주스가 흐르게되었습니다.
업데이트됨:
Bash 3/4에서 테스트되었으며 모든 내장 기능이 있으며 종속성은 없습니다.
이식성: Bash 3 및 Bash 4와만 100% 호환
function _busybox_has() {
builtin command -v busybox >/dev/null ||
return 1
# Sanitize searches for '[' and '[['
a=$1
a=${a//[/\\[}
[[ $(busybox) =~ [[:space:]]($a)([,]|$) ]] ||
return 1
}
bashism 없음, Dash에서 테스트됨:
이식성: sed/egrep을 사용하여 모든 sh에서 이식 가능
_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
}
bashisms 없음, egrep 대신 grep -e(휴대성이 더 높음), Dash에서 테스트됨:
이식성: sed/grep -e를 사용하여 모든 sh에서 이식 가능
_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
}
테스트하려면:
_busybox_has md5sum && echo yes || echo no
답변2
매개변수 없이 입력하면 # busybox
가능한 구성된 명령 목록이 표시됩니다.
환경에 따라 이 문자열을 구문 분석할 수 있습니다. Grep이 언급되었지만 해당 옵션이 없으면 내 환경의 문자열 구문 분석 도구를 통해 접근합니다.
세게 때리다:
options=$('busybox');
if [[ $options == *command* ]]
then
echo "It's there!";
fi
다른 언어를 사용하는 경우 일반적으로 적절한 것이 있습니다.
답변3
busybox --list | busybox grep -qF md5sum && echo yes || echo no
(Debian 12에서 Busybox v1.35.0으로 테스트되었습니다.)
위의 솔루션을 구현하는 쉘 함수:
_busybox_has () { busybox --list | busybox grep -qxF "$1"; }
용법:
_busybox_has md5sum && echo yes || echo no
_busybox_has kitchensink && echo yes || echo no
grep
사용 가능 여부에 대한 보장은 없습니다.
grep
너무 유용해서 그것을 가지고 있지 않다는 것이 특이점이 될 것입니다. 만일을 대비해 다음 셸 함수는 POSIX의 _busybox_has
just 및 기능을 사용하여 구현합니다 ( 는 아님 ).busybox --list
sh
[
_busybox_has () {
busybox --list | ( while IFS= read -r line; do
case "$line" in
"$1") return 0
;;
esac
done
return 1 )
}