Problem mit Kommandogruppe und dialog-gauge

28/04/2014 - 17:05 von Steffen Buhr | Report spam
Hallo,

um festzustellen, ob eine Schleife vollstàndig durchlaufen wurde, will
ich danach wissen welchen Stand ein Zàhler z hat. Làßt man im folgenden
Beispiel das '| dialog …' (und das export) weg, gibt echo erwartungs-
gemàß den letzten Stand aus. Mit '| dialog …' ist jedoch z=0 und i leer.

#!/bin/bash
z=0
{
for ((i=0; i<100; i++)); do
z=$[z+1]
export z
echo $i
kommando || break
done
} | dialog --title ' Verarbeiten ... ' --gauge '' 5 60
echo "i:$i z:$z"

getestet mit bash 3.00.16, dialog 1.1 bzw. bash 4.2.45, dialog 1.2

Lt. bash-manpage soll der Klammerinhalt in der aktuellen Shell-Umgebung
ablaufen, tut es aber mit der --gauge anscheinend nicht. Was ist da los?
Wie komme ich an den Zàhlerstand heran, ohne das in eine Datei schreiben
zu müssen?

Besten Gruß
 

Lesen sie die antworten

#1 wwaf
28/04/2014 - 18:08 | Warnen spam
Am Montag, 28. April 2014 17:05:34 UTC+2 schrieb Steffen Buhr:
Hallo,



um festzustellen, ob eine Schleife vollstàndig durchlaufen wurde, will

ich danach wissen welchen Stand ein Zàhler z hat. Làßt man im folgenden

Beispiel das '| dialog ...' (und das export) weg, gibt echo erwartungs-

gemàß den letzten Stand aus. Mit '| dialog ...' ist jedoch z=0 und i leer.



#!/bin/bash

z=0

{

for ((i=0; i<100; i++)); do

z=$[z+1]

export z

echo $i

kommando || break

done

} | dialog --title ' Verarbeiten ... ' --gauge '' 5 60

echo "i:$i z:$z"



getestet mit bash 3.00.16, dialog 1.1 bzw. bash 4.2.45, dialog 1.2



Lt. bash-manpage soll der Klammerinhalt in der aktuellen Shell-Umgebung

ablaufen, tut es aber mit der --gauge anscheinend nicht. Was ist da los?

Wie komme ich an den Zàhlerstand heran, ohne das in eine Datei schreiben

zu müssen?



Besten Gruß



Hi Steffen,


man bash

...
Each command in a pipeline is executed as a separate process (i.e., in a subshell).
...

In der Variablen PIPESTATUS stehen die exit-codes aller commands der letzten pipe, evtl. 'exit $z' als letztes statement und dann ${PIPESTATUS[0]} verwenden.
Vorsicht mit dem maximalen Wert von $z!

Ähnliche fragen