Ich bemerke ein Problem, wenn mehrere Adb-Befehle von einer Shell-Skript-Schleife ausgeführt werden die meisten der Befehle nicht ausgeführt.Warum brechen ADB-Befehle eine Bash-Skript-Schleife?
Dies ist ein Beispielskript.
Skriptname: 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."
Ausgabe mit adb Befehle auf Kommentar
Ich habe 5 Geräte angeschlossen. Beim Ausführen von der Bash-Datei ohne die adb Befehle ist dies der Ausgang. Es iteriert durch jede der 5 Schleifen.
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.
Output mit Schleife enthält ADB
Befehle
Wenn der Befehl ist adb shell
uncommented es nur dann richtig iteriert Linien der ersten Schleife. Dies ist die Ausgabe mit dem Befehl adb
unkommentiert:
Processing Device #1: 192.168.15.93:5123 Device: 192.168.15.93:5123 | Serialno: 98883837594d4f5453 | Apps installed: 442 Finished.
Kann jemand dieses Verhalten erklären und was getan werden muß, um alle Linien zu haben und alle Schleifen verarbeitet?
Durch die Art und Weise, dies ist der Ausgang an das Skript (einzeiler Befehl und Ausgang) zugeführt wird:
$ adb devices | egrep "\bdevice\b" | awk '{print $1}'
192.168.15.93:5123
192.168.15.95:5123
emulator-5554
31005c77c8cfb200
98883837594d4f5453
Beste Schätzung - die 'adb'-Befehle verbrauchen stdin. Versuchen Sie, stdin ' dev/null' in den' adb' Befehlen umzuleiten. –
Danke! Es klappt. Wenn Sie Ihren Entschluss in Form einer Antwort formulieren, akzeptiere ich die Antwort und stimme den Beitrag zu. –