從shell腳本循環運行多個adb命令時,我注意到一個問題,大多數命令都沒有執行。爲什麼ADB命令打破了bash腳本循環?
這是一個示例腳本。
腳本名稱: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: $appinstallcount\n"
done < <(adb devices | egrep "\bdevice\b" | awk '{print $1}')
echo "Finished."
輸出與亞行命令註釋
我具有連接5個裝置。當從bash文件運行而沒有adb命令時,這是輸出。它遍歷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 "\bdevice\b" | awk '{print $1}'
192.168.15.93:5123
192.168.15.95:5123
emulator-5554
31005c77c8cfb200
98883837594d4f5453
最佳猜測 - 'adb'命令正在使用stdin。嘗試在'adb'命令中重定向stdin' dev/null'。 –
謝謝!有用。如果你以答案的形式提出你的決議,我會接受答案,並提高貢獻。 –