mephisto schrieb:
Hab ich wohl mal wieder den Wald vor lauter Bäumen nicht gesehen...
1
2
3
4
5
6
7
8
9
10
11
12 | count=0
while true; do
# here do something that produces output to write to file > $file <-- Hier bereits umleiten und nicht den ganzen Loop
sleep 1
let count+=1
if (( $count % 60 == 0 )); then
echo -en "\e[0K\r$(($count/60)) minutes passed."
fi
if [ $count -eq 3600 ]; then
break
fi
done
|
Es gibt noch eine andere Möglichkeit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
# open fd 6 to "$file"
exec 6>"$file"
count=0
while true; do
# here do something that produces output to write to file > $file <-- Hier bereits umleiten und nicht den ganzen Loop
echo "a message for file" >&6
sleep 1
let count+=1
if (( $count % 60 == 0 )); then
echo -en "\e[0K\r$(($count/60)) minutes passed."
fi
if [ $count -eq 3600 ]; then
break
fi
done
# close fd 6
exec 6>&-
|
Dabei bleibt die Datei die ganze Zeit offen. Das macht einen Unterschied, falls die $file irgendwann einmal umbenannt wird. Außerdem ist es minimal effizienter. Das wird in Deinem Fall nicht auffallen, aber bei Skripten, die viele Ausgaben erzeugen, kann das wiederholte Öffnen und Schließen der Datei einen Unterschied machen.
Ich würde die Abbruchbedingung übrigens in die Schleife packen - das ist eleganter und lesbarer:
| count=0
while [ $((count += 1)) -le 3600 ]; do
sleep 1
# ...
done
|
In der bash
kannst Du auch eine for
-Schleife nehmen
| for (( c=1 ; c <= 3600 ; ++c )); do
sleep 1
# ...
done
|
Ciao
robert