我正在编写adb工具包,并且卡在了apk提取功能上,在这里我需要以yad / zenity列出手机的已安装软件包。
当我使用以前的设备选择代码但不能与重构代码一起使用时,它允许单选。
这是以前的设备选择
adb start-server 2>/dev/null
adb devices>/tmp/devices.txt
sed -i '1d' /tmp/devices.txt
dl=$(sed 's/\device//g' /tmp/devices.txt)
device=$(zenity --list --text="Choose a device" --column="Devices" $dl --width=300 --height=200 2>/dev/null)
这是重构的设备选择:
adb start-server 2>/dev/null
adb devices>/tmp/devices.txt
sed -i '1d' /tmp/devices.txt
get_index(){
local value="$1"
shift
local arr=("$@")
for j in "${!arr[@]}";
do
if [[ "${arr[$j]}" == "${value}" ]]; then
index="${j}"
return
fi
done
}
x=()
read -r stat < /tmp/devices.txt
if [ "$stat" == "" ]; then
zenity --error --text="No devices connected" --title="No device" --width=300 >/dev/null 2>&1
else
while read -r dev || [[ -n $dev ]]; do
IFS='|'; for i in $dev; do
if [ "$i" != "" ]; then
x+=("$(sed 's/[[:space:]].*//g' <<<$i)")
if [ "$(grep -o -w device <<<$i)" == "device" ]; then
x+=("authorized")
else
x+=("$(sed 's/.*[[:space:]]//g' <<<$i)")
fi
else continue
fi
done
done < /tmp/devices.txt
#dl=$(sed 's/\device//g' /tmp/devices.txt)
device=$(yad --list --text="Choose a device" --column="Devices" --column="Status" ${x[@]} --print-column=1 --no-click --center --width=300 --height=200 2>/dev/null)
这是包装选择代码:
apk=$(adb -s $device shell pm list packages)
opt=$(zenity --list --mid-search --column="Apps" ${apk} --width=600 --height=600 2>/dev/null)
答案 0 :(得分:0)
发现了问题
IFS引起问题是因为文件中没有分隔符
谢谢