Ich beobachte wpa_supplicant
es, damit ich mein Skript beenden kann, wenn das Passwort falsch ist.
Ich habe den gesamten Codeblock unten im Hintergrund angezeigt. Ich kann den echo
Lauf sehen, aber er exit
scheint mein Hauptskript nicht zu stoppen.
(sudo stdbuf -o0 wpa_supplicant -Dwext -i$wifi -cwifi.conf 2>&1 \
| grep -m 1 "pre-shared key may be incorrect" \
&& echo I see this \
&& exit) &
Ich vermute, exit
hier wird einfach ein Thread gelöscht, der in den Hintergrund gerückt ist?
Ist das der Fall? Wenn ja, wie kann ich kill
hier das übergeordnete Element verwenden?
Antwort1
Sie können den pid
Teil Ihres Hauptskripts an die Subshell übergeben und kill
ihn dann bei Bedarf ausführen:
export mypid=$$
(sudo stdbuf -o0 wpa_supplicant -Dwext -i$wifi -cwifi.conf 2>&1 \
| grep -m 1 "pre-shared key may be incorrect" \
&& echo I see this \
&& kill $mypid) &
Antwort2
Richtig, exit
es beeinflusst den Prozess, der in den Hintergrund gedrängt wurde, und sorgt für einen Null-Exit-Status. Ich würde es nicht unbedingt als „Abbruch“ bezeichnen, da der Prozess ohnehin kurz davor stand, gestoppt zu werden.
Führen Sie den WPA-Befehl im Hintergrund aus und behalten Sie seine PID im Auge, damit Sie Folgendes nicht verwenden müssen killall
:
bash -c 'echo $$ > /tmp/pid; exec wpa_supplicant 2>&1 > /tmp/out' &
sleep 1
egrep 'pre-shared key may be incorrect' /tmp/out && kill `cat /tmp/pid`
Ich weiß, Ihr WPA-Befehl ist etwas länger, ich habe ihn abgekürzt, um auf die wichtigen Teile aufmerksam zu machen.