空格分隔的元素在Zenity / Yad中显示为单个选择--list

时间:2019-07-02 18:21:12

标签: bash

我正在编写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)

1 个答案:

答案 0 :(得分:0)

发现了问题

IFS引起问题是因为文件中没有分隔符

谢谢