2016-08-24 3 views
0

私は、デバイスのリストを反復し、adbシェルコマンドをAndroidデバイスに実行する単純なbashスクリプトを持っています。以下のコードは次のとおりです。実行したときADBコマンドを実行しているBashスクリプトはデバイスのリストを反復しません

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の名前です。 2番目のデバイスの '$ usb'変数がリストされていないことに注意してください。 – jagdpanzer

+0

投稿 'adb devices -l |ヘキサダンプ-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 
関連する問題