starbuck86 Geschrieben 27. August 2008 Geschrieben 27. August 2008 Hallo zusammen. Ich bin gerade leicht am verzweifeln.. zu meinem Problem: Ich schreibe seit einiger zeit Shell-Skripte und kenne noch nicht alle Möglichkeiten, die ein Shell-Skript mir bietet. Und zwar geht es um mein aktuelles Projekt. Ich habe ein Skript geschrieben, dass auf verschiedenen Servern verschiedene Informationen abruft und auf dem Bildschirm ausgibt. Um es genauer zu sagen, es sind bis zu 200 verschiedene Informationspakete, die am Host-Rechner eintreffen. Um dem User dieses Skripts einen Status zu geben, wie weit es ist hab ich eine einfach echo-Ausgabe pro Informationspaket. Also sieht meine Ausgabe so aus: >> /server1/pfad/fcb >> /server2/pfad/fcb >> /server3/pfad/fcb ... >> /server200/pfad/fcb Da mir dies aber zu viel Platz auf dem Bildschirm verbraucht, möchte ich nun, dass die echo-Ausgaben sich gegenseitig überschreiben. Also, dass sobald das neue Informationspaket eingetroffen ist, die aktuelle Echo-Ausgabe auf dem Bildschirm durch eine neue ersetzt wird, sodass ich nur 1 Zeile für den Status benötige. Jetzt ist die Frage, wie man das realisiert. Ich habe versucht das ganze über ANSI-Escape-Sequenzen zu lösen. Hier mal ein einfaches Beispiel: #!/bin/sh for i in Hello Bonjour Welcome Hallo ; do echo -en $i sleep 2 echo -en "\e[J" # laut meinem Script sollte dieser ANSI-Code # die aktuelle Zeile auf dem Bildschirm löschen done exit 0 Allerdings hat das nicht funktioniert, wie ich mir das vorgestellt hatte. Der besagte Befehl hatte meines Erachtens nach keine Wirkung gezeigt - auch keine anderweitige Wirkung. Wo ist mein Fehler - oder wie kann man das lösen? INFO:: Ich benutze zur Shell-Programmierung ein SUN Solaris 10 System. Gruß und vorzeitig vielen Danke für die Antworten starbuck Zitieren
bigvic Geschrieben 27. August 2008 Geschrieben 27. August 2008 Hi, hier mal ein kleines Script als Gedankenanstoss: #!/bin/sh t () { while true do for i in \| \/ \- \\ do echo "$i \b\b\c"; sleep 1 done done } t & ciao, vic Zitieren
starbuck86 Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 Das hat mir grad ehrlich gesagt nicht so wirklich auf die Sprünge geholfen. In diesem Fall laufen die Zeilen untereinander ab, genau das was ich jetzt schon habe. Gruß Zitieren
bigvic Geschrieben 27. August 2008 Geschrieben 27. August 2008 Hi, echt? Wenn ich das Script laufen lasse, dann bleibt das alles auf einer Stelle. ciao, vic Zitieren
t3quill4b0y Geschrieben 27. August 2008 Geschrieben 27. August 2008 hi, schonmal mit dem befehl "clear" versucht? cu Zitieren
starbuck86 Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 Clear löscht den ganzen Bildschirm. Ich will nur 1 Zeile löschen/ersetzen. Zitieren
Crash2001 Geschrieben 27. August 2008 Geschrieben 27. August 2008 Unter welcher Shell lässt du das Script denn laufen? Probier mal eine andere aus. Bash z.B. Zitieren
starbuck86 Geschrieben 27. August 2008 Autor Geschrieben 27. August 2008 Jop hat funktioniert. Hatte vorhin n Fehler drin, sodass er mir die backslash escapes nicht erkannt hat. Danke noch mal für den Denkanstoss, vic: Lösung war folgende: **************** #!/bin/bash tput civis terml=`tput lines` sterml=`expr $terml - 1` for i in Hello Hallo Welcome Bonjour Salve Servus ; do echo -e "\e[${sterml};1H" echo -en $i echo -e "\e[${sterml};1H" sleep 2 echo -en "\e[J" done tput cvvis exit 0 Gruß starbuck Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.