From 30321782479b91d604d227800ee5086c66dadc4a Mon Sep 17 00:00:00 2001 From: Michael Sauer Date: Sat, 12 Sep 2026 13:13:03 +0200 Subject: [PATCH] fix: ninlight-station status gibt Dienstzustand nur einmal aus, Exit 0 "systemctl is-active" schreibt den Zustand ("inactive", ...) auf stdout und liefert dabei einen Rueckgabewert ungleich 0 - der "|| echo inaktiv"- Zweig lief also zusaetzlich mit, und beide Zeilen landeten in der Ausgabe. Ausserdem endete "status" ueber den letzten Befehl im case-Zweig faktisch mit dessen Exit-Code, der 1 war, sobald noch nie ausgeliefert wurde (kein /run/ninlight-station/status.json) - das machte "status" in jedem Skript, das den Exit-Code abfragt, unbrauchbar. Beide Stellen behoben: der Dienstzustand wird nur noch einmal ausgegeben, und der Zweig endet mit explizitem "exit 0", sobald die Auskunft erteilt werden konnte. Co-Authored-By: Claude Sonnet 5 --- tools/station/ninlight-station | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/station/ninlight-station b/tools/station/ninlight-station index ac212b0..5354271 100755 --- a/tools/station/ninlight-station +++ b/tools/station/ninlight-station @@ -91,7 +91,13 @@ off) fi ;; status) - printf 'Dienst : %s\n' "$(systemctl is-active ninlight-station 2>/dev/null || echo inaktiv)" + # "systemctl is-active" schreibt den Zustand ("inactive", "failed", ...) auf stdout und + # liefert dabei einen Rueckgabewert ungleich 0, sobald der Dienst nicht "active" ist - + # ein "|| echo inaktiv" wuerde also zusaetzlich zur ersten Zeile ausgeloest und beide + # landen in der Ausgabe. Der Zustand selbst ist die Auskunft; "status" ist damit + # erfolgreich, sobald es ihn ermitteln konnte, unabhaengig vom Dienstzustand - deshalb + # am Ende explizit exit 0. + printf 'Dienst : %s\n' "$(systemctl is-active ninlight-station 2>/dev/null || true)" printf 'wlan0 : %s\n' "$(nmcli -t -f GENERAL.CONNECTION device show wlan0 2>/dev/null | cut -d: -f2)" printf 'Adresse: %s\n' "$(ip -4 -br addr show wlan0 2>/dev/null | awk '{print $3}')" echo "Images :" @@ -104,7 +110,11 @@ print(t[21:37].rstrip(b"\x00").decode("ascii", "replace") if t[:4] == b"NINL" el PY )" done + # "status" soll mit 0 enden, sobald es seine Auskunft geben konnte, auch wenn noch nie + # ausgeliefert wurde - ohne das "|| true" waere der Exit-Code des Skripts hier der des + # fehlgeschlagenen Tests (1), weil das die letzte Anweisung im Zweig ist. [ -r /run/ninlight-station/status.json ] && { echo "Zuletzt ausgeliefert:"; sed 's/^/ /' /run/ninlight-station/status.json; } + exit 0 ;; *) echo "Aufruf: ninlight-station on|off|status" >&2