加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么ADB命令会破坏bash脚本循环?

发布时间:2020-12-15 17:03:20 所属栏目:安全 来源:网络整理
导读:从 shell脚本循环运行多个adb命令时,我注意到一个问题,大多数命令都没有执行. 这是一个示例脚本. 脚本名称:adbscript.sh: #!/bin/bashdevicecount=0while read device; do ((devicecount++)) serialno="NA" appinstallcount="NA" echo "Processing Device
从 shell脚本循环运行多个adb命令时,我注意到一个问题,大多数命令都没有执行.

这是一个示例脚本.

脚本名称:adbscript.sh:

#!/bin/bash

devicecount=0
while read device; do
    ((devicecount++))
    serialno="NA"
    appinstallcount="NA"
    echo "Processing Device #$devicecount: $device"
    # serialno=$(adb -s $device shell getprop ro.serialno)
    # appinstallcount=$(adb -s $device shell pm list packages | wc -l)
    echo -e "Device: $device | Serialno: $serialno | Apps installed: $appinstallcountn"
done < <(adb devices | egrep "bdeviceb" | awk '{print $1}')
echo "Finished."

输出adb命令已注释掉

我连接了5台设备.当从没有theadb命令的bash文件运行时,这是输出.它遍历5个循环中的每个循环.

Processing Device #1: 192.168.15.93:5123
Device: 192.168.15.93:5123 | Serialno: NA | Apps installed: NA

Processing Device #2: 192.168.15.95:5123
Device: 192.168.15.95:5123 | Serialno: NA | Apps installed: NA

Processing Device #3: emulator-5554
Device: emulator-5554 | Serialno: NA | Apps installed: NA

Processing Device #4: 31005c77c8cfb200
Device: 31005c77c8cfb200 | Serialno: NA | Apps installed: NA

Processing Device #5: 98883837594d4f5453
Device: 98883837594d4f5453 | Serialno: NA | Apps installed: NA

Finished.

使用包含ADB命令的循环输出

取消注释adb shell命令时,它只会正确迭代第一个循环的行.这是取消注释adb命令的输出:

Processing Device #1: 192.168.15.93:5123
Device: 192.168.15.93:5123 | Serialno: 98883837594d4f5453 | Apps installed: 442

Finished.

有人可以解释这种行为,并且必须做些什么来处理所有的行和所有循环?

顺便说一句,这是提供给脚本的输出(一个衬管命令和输出):

$adb devices | egrep "bdeviceb" | awk '{print $1}'
192.168.15.93:5123
192.168.15.95:5123
emulator-5554
31005c77c8cfb200
98883837594d4f5453
adb shell将stdin连接到设备上运行的命令,这通常会消耗stdin直到达到EOF.因此,这些命令会消耗所有其余的设备名称,从而导致循环退出.

使用stdin重定向运行adb,这样他们就可以立即得到EOF而不会弄乱你想要循环的内容:

serialno=$(adb </dev/null -s $device shell getprop ro.serialno)
appinstallcount=$(adb </dev/null -s $device shell pm list packages | wc -l)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读