[PATCH 1/2] nodewatcher: split up

robert rlanghammer at web.de
Do Okt 10 12:19:15 CEST 2019


Hi Adrian, s. unten

Am 09.10.19 um 14:22 schrieb Adrian Schmutzler:
> Hallo Robert,
>
>>>> In $? ist in diesem Fall der Exitstatus der Subshell. 
>>> Da müsste man dann überlegen, was den Exitstatus der Subshell determiniert. 
>>>
>>> Klingt für mich sehr danach, als ob man einfach [ -n "$tmp" ] prüfen sollte. 
>> Nein, das ist schon richtig so. Wenn der Timer zuschlägt und das Skript 
>> noch nicht fertig ist, steht zerhacktes in $tmp. Wir bekommen dann 
>> $?=143 (SIGTERM) und man kann das Ganze mit if [ $? = 0 ] verwerfen. 
>> Wichtig ist auch vernünftiges Fehlerhandling in den Skripten. Ein exit 1 
>> landet hier in $?. 
> Okay, das spricht gegen -n.
>
> Ich bin mir nur nicht sicher, ob bei dem ganzen asynchronen Prozessgedöns dann auch der richtige exit status "der letzte" ist.
> Ich habe das daher mal getestet und es scheint aber wunderbar zu funktionieren.
>
> Allerdings habe ich hier ein anderes Problem:
>
> Wenn ich das echo von run_with_timeout abfange, braucht er die gesamte wait time:
> z.B. tmp=$(run_with_timeout false)
> blockiert die Konsole entsprechend.
>
> Wenn ich run_with_timeout direkt aufrufe, ist er sofort fertig, z.B.
> run_with_timeout false
>
> Output und Status-Code werden in beiden Fällen korrekt verarbeitet.
>
> Hat da jemand eine Idee?

Ja, das liegt an der Zuweisung tmp=$(xxx). Die erfolgt erst wenn die
Subshell fertig ist. Da gehört auch das sleep dazu auch wenn das mit &
als bg-Job gestartet wird.

Mit Variablen kann man das auch nicht lösen. Der Export funktioniert nur
in eine Richtung und ist eigentlich nur ein Kopieren der Variable in die
Subshell.

Es gibt nur eine Möglichkeit das zu umgehen. Man schreibt in der
Subshell die Daten auf die Platte und holt die in der äußeren Shell
wieder rein. Da muss man dann abwägen ob man das will. Die Shell ist
halt  nur eine Skriptsprache.

In diesem Fall spielt die Zeit keine all zu große Rolle. Und ich würde
nicht in eine Datei schreiben. Auch der Vorteil vom Timeout überwiegt
meiner Ansicht nach und sollte drin bleiben.

Ich würde das so lassen. Nur der Test [ $? = 0 ]  muss noch rein.

Viele Grüße
Robert


>
> Grüße
>
> Adrian

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 833 bytes
Beschreibung: OpenPGP digital signature
URL         : <https://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20191010/44160297/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev