2016-08-24 5 views
0

У меня есть простой скрипт bash, который выполняет итерацию по списку устройств и запускает команды оболочки adb на устройства Android. Код приведен ниже:Сценарий Bash, выполняющий команды ADB, не будет перебирать список устройств

echo "Displaying devices to be configured:" 
adb devices | sed "1d ; $ d" 
echo "" 
echo "###########################" 
echo "#       #" 
echo "# Starting configuration! #" 
echo "#       #" 
echo "###########################" 
echo "" 

while read -r udid device usb product model device2; do 

echo "" 
echo $usb 
echo "" 

# INSTALL THE APPS 
adb -s "$usb" install ./src/apps/1.apk 
adb -s "$usb" install ./src/apps/quicksupport.apk 

# SET WIFI OFF 
adb -s "$usb" shell settings put global wifi_on 0 

# SET SOUND TO 0 
adb -s "$usb" shell service call audio 7 i32 3 i32 0 i32 1 

# SET AUTO TIME ZONE OFF 
adb -s "$usb" shell settings put global auto_time_zone 0 

# SET INSTALL NON MARKET APPS ON 
adb -s "$usb" shell settings put global install_non_market_apps 1 

# REBOOT 
adb -s "$usb" reboot 

done < <(adb devices -l | sed "1d; $ d") 

echo "" 
echo "###########################" 
echo "#       #" 
echo "# Configuration complete! #" 
echo "#       #" 
echo "###########################" 
echo "" 

При запуске код успешно выполнит все конфигурации на одном устройстве. При подключении к двум устройствам, выход звучит следующим образом:

Displaying devices to be configured: 
ABCDEF device 
ABCDEF device 

########################### 
#       # 
# Starting configuration! # 
#       # 
########################### 


usb:336592896X 

[100%] /data/local/tmp/1.apk 
    pkg: /data/local/tmp/1.apk 
Failure [INSTALL_FAILED_ALREADY_EXISTS] 
[100%] /data/local/tmp/quicksupport.apk 
    pkg: /data/local/tmp/quicksupport.apk 
Failure [INSTALL_FAILED_ALREADY_EXISTS] 
ABCDEF  device usb:337641472X product:msm8960 model:msm8960 device:msm8960 
Result: Parcel(00000000 '....') 

########################### 
#       # 
# Configuration complete! # 
#       # 
########################### 

Кажется, чтобы вернуть оставшуюся часть команды adb devices -l и чем выйти из цикла. Это проблема с bash? Это проблема с adb? Я пытался понять это несколько дней.

Примечание: Выход Result: Parcel(00000000 '....') происходит сразу после того, как звук установлен на ноль.

Примечание: Не обращайте внимания на Failure [INSTALL_FAILED_ALREADY_EXISTS], это происходит из-за того, что приложения уже установлены. Меня это не беспокоит.

Примечание: Проводка adb devices -l | hexdump -C

00000000 4c 69 73 74 20 6f 66 20 64 65 76 69 63 65 73 20 |List of devices | 
00000010 61 74 74 61 63 68 65 64 0a 30 31 32 33 34 35 36 |attached.| 
00000020 37 38 39 41 42 43 44 45 46 20 20 20 20 20 20 20 |789ABCDEF  | 
00000030 64 65 76 69 63 65 20 75 73 62 3a 34 33 37 33 38 |device usb:43738| 
00000040 37 32 36 34 58 20 70 72 6f 64 75 63 74 3a 6d 73 |7264X product:ms| 
00000050 6d 38 39 36 30 20 6d 6f 64 65 6c 3a 6d 73 6d 38 |m8960 model:msm8| 
00000060 39 36 30 20 64 65 76 69 63 65 3a 6d 73 6d 38 39 |960 device:msm89| 
00000070 36 30 0a 30 31 32 33 34 35 36 37 38 39 41 42 43 |60.ABC| 
00000080 44 45 46 20 20 20 20 20 20 20 64 65 76 69 63 65 |DEF  device| 
00000090 20 75 73 62 3a 33 33 36 35 39 32 38 39 36 58 20 | usb:336592896X | 
000000a0 70 72 6f 64 75 63 74 3a 6d 73 6d 38 39 36 30 20 |product:msm8960 | 
000000b0 6d 6f 64 65 6c 3a 6d 73 6d 38 39 36 30 20 64 65 |model:msm8960 de| 
000000c0 76 69 63 65 3a 6d 73 6d 38 39 36 30 0a 0a  |vice:msm8960..| 
000000ce 
+0

Они там. 'echo $ usb' возвращает' usb: 336592896X', имя usb, которое я использую для успешного подключения к устройству. Обратите внимание, что он не перечисляет переменную '$ usb' для второго устройства. – jagdpanzer

+0

post 'устройства adb -l | hexdump -C' –

+0

@ AlexP. вывешен для вас. – jagdpanzer

ответ

1

Это немного более эффективным и менее подвержен ошибкам способ сделать то же самое:

DeviceConfig() { 

# INSTALL THE APPS 
adb -s $1 install ./src/apps/1.apk 
adb -s $1 install ./src/apps/quicksupport.apk 

# SET WIFI OFF 
adb -s $1 shell settings put global wifi_on 0 

... 

adb -s $1 reboot 

} 

for usb in $(adb devices -l | awk '/ device usb:/{print $3}'); do DeviceConfig $usb; done 
Смежные вопросы