PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : while Schleife und eine Funktion



Kees_23
14-05-2009, 21:11
Hallo Forum,
Ich bin ziemlicher Anfänger was Shellscripts angeht. Ich habe ein Script, in dem Ordner kopiert werden, was ohne Probleme funktioniert. nur würde ich gerne eine Ausgabe am Bildschirm erzeugen, dass sich noch was bewegt.

Mein Ansatz:

copy () {
cp /ordner/ /ordner2 -R;
return 0;
}

while copy
do
printf ".";
sleep 1;
done

Leider bekomme ich die Ausgabe "." leider nicht.

Vielleicht kann mir jemand von euch helfen, oder einen anderen Ansatz geben.

Gruß

Kees

ContainerDriver
14-05-2009, 21:56
Hallo,

eigentlich sollten in deinem Terminal sehr viele Punkte erscheinen. Steht da wirklich nichts?

Übrigens macht der Code nicht das, was du erwartest: die Funktion copy wird viele Male aufgerufen, die Ausgabe erscheint aber erst jeweils nach einem kompletten Kopiervorgang.

Gruß, Florian

Kees_23
15-05-2009, 08:01
Hallo,

eigentlich sollten in deinem Terminal sehr viele Punkte erscheinen. Steht da wirklich nichts?

Leider nicht bekomme ich keine "." dargestellt.



Übrigens macht der Code nicht das, was du erwartest: die Funktion copy wird viele Male aufgerufen, die Ausgabe erscheint aber erst jeweils nach einem kompletten Kopiervorgang.


Das verstehe ich dann nicht. Es sollte doch eigentlich so sein, dass solange die Funktion läuft der Inhalt der Schleife wiederholt wird, oder?

Gruß

Kees

ContainerDriver
15-05-2009, 14:04
Leider nicht bekomme ich keine "." dargestellt.


Kannst du bitte mal den kompletten Quellcode sowie den Aufruf des Skripts posten (bitte die Code-Tags verwenden)? Was passiert, wenn du printf durch echo ersetzt?



Das verstehe ich dann nicht. Es sollte doch eigentlich so sein, dass solange die Funktion läuft der Inhalt der Schleife wiederholt wird, oder?


Nein, die Funktion wird im Schleifenkopf aufgerufen, komplett abgearbeitet und dann wird anhand des Rückgabewertes entschieden, ob der Schleifenrumpf ausgeführt wird.

Wenn du eine Art Fortschrittsbalken haben willst, dann kannst du mal folgenden Thread lesen: http://www.mrunix.de/forums/showthread.php?t=56364 (http://www.mrunix.de/forums/showthread.php?t=56364&highlight=wget+balken), oder du machst es in dieser Art (ungetestet und etwas unsauber wegen der temporären Datei):


TMPFILE=/tmp/copy.$$

copy ()
{
rm -f $TMPFILE
touch $TMPFILE
#Befehl
rm -f $TMPFILE
}

copy &
while [ -e $TMPFILE ]; do
echo -n .
sleep 0.5
done;


Gruß, Florian