Mehrere Geräte gleichzeitig unterstützen

Ein bereits verbundenes Gerät war bisher ein Grund auszusteigen, und provision.sh
brach bei mehr als einem sogar ab. Beim Gerätewechsel ist genau das aber der
Normalfall: altes und neues Telefon müssen zusammen erreichbar sein, sonst lässt
sich nichts klonen.

adb-wireless.sh zeigt jetzt die verbundenen Geräte mit Hersteller und Modell und
bietet an, weiterzugehen, ein weiteres Gerät aufzunehmen oder eines zu trennen.
provision.sh fragt bei mehreren, welches eingerichtet werden soll.

Die Auswahl landet in ADB_SERIAL, und die adb-Hülle in lib.sh ergänzt -s
selbsttätig — aber nur bei Unterbefehlen, die sich an ein Gerät richten.
'adb -s X devices' oder 'adb -s X connect' wären Unsinn und würden fehlschlagen.

Dazu eine Korrektur, die beim Hinzufügen sonst falsch angeschlagen hätte: nach
dem Koppeln reicht 'irgendein Gerät verbunden' als Erfolgsnachweis nicht, denn
das erste Telefon ist ja noch da. Gezählt wird jetzt, ob eines DAZUGEKOMMEN ist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-09 18:12:57 +02:00
co-authored by Claude Opus 5
parent f30b32aaa8
commit 915fe53eeb
3 changed files with 115 additions and 13 deletions
+62 -1
View File
@@ -99,6 +99,67 @@ adb_einrichten() {
;;
esac
# Ab hier zeigt 'adb' immer auf die ausgewählte Fassung, unabhängig von PATH.
adb() { "$ADB_BIN" "$@"; }
#
# Ist ein Gerät ausgewählt (ADB_SERIAL), wird -s ergänzt — aber nur bei
# Unterbefehlen, die sich an ein bestimmtes Gerät richten. 'adb -s X connect'
# oder 'adb -s X devices' wären Unsinn und würden fehlschlagen.
adb() {
case "${1:-}" in
shell|push|pull|install|install-multiple|uninstall|forward|reverse| \
logcat|sync|reboot|remount|root|unroot|bugreport|wait-for-device)
if [ -n "${ADB_SERIAL:-}" ]; then
"$ADB_BIN" -s "$ADB_SERIAL" "$@"
return
fi
;;
esac
"$ADB_BIN" "$@"
}
return $rc
}
# ── Geräteauswahl ────────────────────────────────────────────────────────────
# Mehrere Geräte gleichzeitig sind der Normalfall, sobald man ein zweites Telefon
# koppelt oder nebenher noch eines am Kabel hängt. Statt abzubrechen wird gefragt.
ADB_SERIAL="${ADB_SERIAL:-}"
adb_geraete() { adb devices | awk '$2 == "device" { print $1 }'; }
geraet_beschreiben() {
local serial="$1" hersteller modell
hersteller=$("$ADB_BIN" -s "$serial" shell getprop ro.product.manufacturer 2>/dev/null | tr -d '\r')
modell=$("$ADB_BIN" -s "$serial" shell getprop ro.product.model 2>/dev/null | tr -d '\r')
printf '%s %s' "${hersteller:-?}" "${modell:-?}"
}
# Wählt ein Gerät aus und setzt ADB_SERIAL.
# 0 = ein Gerät ausgewählt
# 1 = gar kein Gerät verbunden
geraet_waehlen() {
local liste=() zeile i wahl
while IFS= read -r zeile; do
[ -n "$zeile" ] && liste+=("$zeile")
done < <(adb_geraete)
case ${#liste[@]} in
0) ADB_SERIAL=""; return 1 ;;
1) ADB_SERIAL="${liste[0]}"; return 0 ;;
esac
kopf "Mehrere Geräte verbunden"
for i in "${!liste[@]}"; do
printf ' [%d] %-24s %s\n' "$((i + 1))" "${liste[i]}" "$(geraet_beschreiben "${liste[i]}")"
done
printf '\n Welches Gerät soll eingerichtet werden? [1] > '
read -r wahl </dev/tty || wahl=1
wahl="${wahl:-1}"
if [ "$wahl" -ge 1 ] 2>/dev/null && [ "$wahl" -le ${#liste[@]} ]; then
ADB_SERIAL="${liste[$((wahl - 1))]}"
ok "Gewählt: $ADB_SERIAL ($(geraet_beschreiben "$ADB_SERIAL"))"
return 0
fi
warn "Ungültige Auswahl — nehme das erste Gerät."
ADB_SERIAL="${liste[0]}"
return 0
}