확인해보고 싶은 실행 바이너리를 공백으로 구분한 목록입니다.
바이너리 이름만 넣어도 되고 전체 경로까지 넣어도 됩니다.
list="sqlite3 busybox /system/xbin/busybox oggz sox sox0 bc gawk gnutar curl 7za file bash perl dcraw ffmpeg ffmpeg1 ffmpeg0 vim x264 emacs rsync ffprobe rvim zip convert jhead testdisk photorec "
cnt=$( echo $list | wc -w )
전체 갯수를 확인합니다.
각각 바이너리를 실행하는 루프를 돌립니다.
for i in $list ; do
bin=${i##*/}
${i##*/} 는 변수 i 에서 마지막 / 이후에 오는 문자열만 가져옵니다. 바이너리 이름만 뽑는거지요.
echo $green$bin$N
방법1
if [ "$bin" = "busybox" ] || [ "$bin" = "7za" ] || [ "$bin" = "lua" ] || [ "$bin" = "mp3gain" ] || [ "$bin" = "dcraw" ]
then
ver=$( $i | head -n 2 | tr " " "n" | fgrep -m 1 "." )
방법2
elif [ "$bin" = "ffmpeg" ] || [ "$bin" = "ffmpeg0" ] || [ "$bin" = "ffmpeg1" ] || [ "$bin" = "emacs" ] || [ "$bin" = "ffprobe" ]
then
ver=$( $i -version | head -n 2 | tr " " "n" | fgrep -m 1 "." )
방법 3
elif [ "$bin" = "zip" ]
then
ver=$( $i --version | head -n 3 | tr " " "n" | fgrep -m 2 "." | awk '{printf $0}' | cut -d"." -f2- )
방법 4
elif [ "$bin" = "jhead" ]
then
ver=$( $i -h | head -n 2 | tr " " "n" | fgrep -m 2 "." | awk '{printf $0}' | cut -d"." -f2- )
방법 5
else
ver=$( $i --version | head -n 2 | tr " " "n" | fgrep -m 1 "." )
fi
바이너리를 실행해서 반환되는 문자열의 앞부분 몇줄만 가져오게 합니다.
예를 들면 비지박스의 경우
busybox | head -n 2 | tr " " "n" | fgrep -m 1 "."
이렇게 실행하면 실행후 화면에 나오게 되는 2줄만 가져오게 하고 공백을 줄바꿈으로 바꿔서 마침표가 있는 첫번째 문자열 하나만 뽑게 함니다.
그게 버전 정보가 됩니다.
바이너리 따라서 --version 혹은 -h 등을 붙여야 하는 경우가 있어서 if 로 구분해서 실행해봤습니다.
echo ${yellow}
$ver${N}
done
echo
echo ${cyan}"checked ELF : "$cnt${N}
실행권한이 없는 메모리에 다운로드 한 경우에는 실행할 수가 없어서 직접 뽑을 수가 없는데
억지로 진행하려면
/system/xbin 에 임시 파일로 투척하고 권한 준 다음에 이 과정을 거치면 되겠네요.
그냥 이렇게 버전 정보를 확인하는 꼼수가 떠올라서 해봤습니다. ^^*