Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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ß

hi,

schonmal mit dem befehl "clear" versucht?

cu

Clear löscht den ganzen Bildschirm. Ich will nur 1 Zeile löschen/ersetzen.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.