adb gezielt auswählen statt der PATH-Reihenfolge zu vertrauen

Debians Paket android-tools-adb liefert Version 29 und kennt kein 'adb pair' —
das kam erst mit platform-tools 30. Wer beides installiert hat, bekommt je nach
PATH-Reihenfolge und Alter der Terminalsitzung mal das eine und mal das andere,
und die WLAN-Kopplung scheitert scheinbar grundlos.

provision/lib.sh sucht deshalb gezielt eine Fassung, die 'pair' beherrscht, und
schiebt eine Shell-Funktion 'adb' davor, sodass die Aufrufstellen unverändert
bleiben. Eine ausdrücklich gesetzte Vorgabe ADB= gilt absolut, auch wenn sie
kein pair kann — stillschweigend etwas anderes zu nehmen wäre die unangenehmere
Überraschung. Fehlt pair, läuft provision.sh mit einer Warnung weiter (für USB
reicht es), adb-wireless.sh bricht sauber ab.

Die Prüfung kommt bewusst ohne Pipe aus: 'adb pair' ohne Argumente endet mit
Code 1, weil es ein Aufruffehler ist. Unter 'set -o pipefail' hätte das die
gesamte Pipeline als fehlgeschlagen gelten lassen, obwohl grep den Hilfetext
gefunden hatte — die Erkennung meldete dadurch selbst adb 36 als zu alt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-09 17:53:41 +02:00
co-authored by Claude Opus 5
parent d334219c4f
commit 410cf01973
3 changed files with 121 additions and 29 deletions
+9 -12
View File
@@ -15,17 +15,13 @@ TERMUX=com.termux
TROCKEN=0
[ "${1:-}" = "--dry-run" ] && TROCKEN=1
if [ -t 1 ]; then
C_OK=$'\033[32m'; C_WARN=$'\033[33m'; C_ERR=$'\033[31m'
C_HEAD=$'\033[1;36m'; C_DIM=$'\033[2m'; C_OFF=$'\033[0m'
else
C_OK=""; C_WARN=""; C_ERR=""; C_HEAD=""; C_DIM=""; C_OFF=""
fi
kopf() { printf '\n%s══ %s ══%s\n' "$C_HEAD" "$*" "$C_OFF"; }
ok() { printf '%s ✓%s %s\n' "$C_OK" "$C_OFF" "$*"; }
warn() { printf '%s !%s %s\n' "$C_WARN" "$C_OFF" "$*"; }
fehl() { printf '%s ✗%s %s\n' "$C_ERR" "$C_OFF" "$*"; }
hinweis() { printf '%s %s%s\n' "$C_DIM" "$*" "$C_OFF"; }
source "$(dirname "$0")/lib.sh"
# Wählt eine adb-Fassung aus, statt sich auf die Reihenfolge in PATH zu verlassen:
# Debians Paket ist Version 29 und kennt kein 'adb pair'. Rückgabewert 2 heißt
# "gefunden, aber zu alt für WLAN" — für USB reicht es trotzdem.
ADB_KANN_WLAN=1
adb_einrichten || ADB_KANN_WLAN=0
# Führt ein adb-Kommando aus und meldet das Ergebnis, ohne bei Fehlschlag
# abzubrechen: Hersteller-ROMs kennen nicht jedes appops-Ziel, und ein fehlendes
@@ -53,7 +49,7 @@ adbs() {
# ── Gerät ────────────────────────────────────────────────────────────────────
kopf "Gerät"
command -v adb >/dev/null 2>&1 || { fehl "adb nicht gefunden. Bitte android-tools-adb installieren."; exit 1; }
hinweis "adb $(adb_version "$ADB_BIN")$ADB_BIN"
HIER="$(cd "$(dirname "$0")" && pwd)"
@@ -81,6 +77,7 @@ if [ "$ANZAHL" -eq 0 ]; then
[a] Abbrechen
TEXT
[ "$ADB_KANN_WLAN" = 0 ] && warn "Achtung: das gefundene adb kann kein WLAN — [w] wird scheitern."
printf '\n Auswahl > '
read -r WAHL </dev/tty
case "$WAHL" in