Zum Inhalt springen

Shellskript - need help..


Schlaubi

Empfohlene Beiträge

Hi,

ich möchte in einem Shellskript ein Terminal antriggern und dem ein Kommando schicken, mitdem

ich die ganze vorherige Ausgabe lösche, hat form feet - ascii 012 etwas damit zu tun- wenn ja - wie mach ich das??

Mit echo \012 oder wie? Das Terminal ist ja ein normales VT100 denke ich. Wusste nicht, was ich bei google.de eingeben sollte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Du kannst innerhalb eines Terminals das Bild mit dem Kommando "clear" löschen (clear verwendet dafür die terminfo Datenbank, um die geeignete Escape-Sequenz zu generieren). "clear" läßt sich auch umleiten (clear >/dev/tty0), alternativ kannst Du auch "tput" verwendet ("tput clear").

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry, aber das funktioniert nicht. Ich kann das Kommando clear nicht verwenden. Und tput nützt mir auch nichts, ich muss direkt das Terminal ansprechen, ohne die Befehle clear und tput. Kann ich dem Terminal nicht ein form feet senden - wenn ja wie? Ich habs probiert, doch die Ausgabe wird nicht gelöscht, bevor eine Fehlermeldung ausgegeben wird. Ich weiß auch nicht genau was form feet bedeutet, nur dass es in der ASCII Tabelle steht ;)

Also ich bräuchte ein ASCII Zeichen das den Bildschirm löscht - denke ich!?

Hintergrund:

Ich baue über ein Shellskript eine Telnet-Verbindung zu einem ISDN-Router auf, dann kann man schaffen, etc....wenn jetzt die Verbindung mit CTRL-D+C abgebaut wird, dann hab ich den ganzen Schmonz am Terminal, denn würde ich gerne löschen, weil dann nämlich eine Ausgabe folgt: Done.

Damit das "Done." jetzt nicht irgendwo in mitten der Ausgabe der Telnet-Session steht und es für den User des Skriptes nicht sichtbar ist, will ich vorher den Bildschirm löschen - like 'clear'. Verstanden, oder zu doof erklärt?? ;)

Fakt ist: Ich kann clear und tput nicht verwenden.

PS: Newlines like \n will ich auch nicht verwenden, erstensmal verhuntst das den Code - was nicht so schlimmer wäre, jedoch trifft das nicht meine Erwartungen. Weil es halt darauf ankommt wo der Cursor steht - nachdem wird die Statusmeldung mal weiteroben geschrieben, mal weiter unten und es kommt vor, dass die Meldung sogar inmitten der Ausgabe der Telnet Session steht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

D.h. Du willst nachdem die telnet-Session terminiert ist, das lokale Terminalfenster löschen? Mir ist immer noch etwas unklar, warum die clear bzw. tput nicht verwenden kann, dafür aber beliebige ASCII-Characters. tput bzw. clear erzeugen die ASCII-Sequenz, die verwendet wird um das Terminal zu löschen. Oder soll der ISDN-Router den Bildschirm löschen? In dem Fall siehts natürlich anders aus, da Dir tput/clear nicht zur Verfügung stehen.

Falls der Router einen Befehl besitzt, nach dem Ausloggen eine Text-Sequenz auf den Bildschirm zu schreiben, könntest Du das folgende mal probieren:

Leite des Ausgabe von clear in eine Datei um ("clear >datei"). Dann schaust Du Dir die Datei mit einem Hexeditor an ("od datei"). Damit erhälst Du die Sequenz, die der Router an das Terminal schicken muss, um den Schirm zu löschen. Dieses Sequenz kann Du dann im Router eintragen. Allerdings muss Dir dieser die Möglichkeit zur Verfügung stellen, beliebige Ascii-Zeichen zu schicken und zu quoten. Problematisch dabei ist allerdings, dass die Escape-Sequenz sich von Terminal zu Terminal unterscheiden kann.

FF ist die Abkürzung für "Form Feed" (Zeilevorschub). Du kannst versuchen, die passende Anzahl an FF/CRs zu schicken. Das entspricht aber nicht wirklich einem "clear", da der Cursor am Ende des Terminal steht.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von nic_power

D.h. Du willst nachdem die telnet-Session terminiert ist, das lokale Terminalfenster löschen?

Jop, ganz genau!

Mir ist immer noch etwas unklar, warum die clear bzw. tput nicht verwenden kann, dafür aber beliebige ASCII-Characters.

Weil ich in dem Shellskript ein Here-Dokument gebastelt habe, dass ich zu einem späteren Zeitpunkt dem Kommando "expect" also Skript übergebe. Nunja expect baut auf Tcl auf und wenn ich nun in das Here-Document (bzw. das expect-Skript) ein clear einbaue bzw. ein tput clear, dann sagt er immer Command not found, hingegen bei ASCII Caracters funzt es prima - da ich \n schon angewand habe.

z.B. mit puts "\nDone." und das geht.

....clear erzeugen die ASCII-Sequenz, die verwendet wird um das Terminal zu löschen.

aha, das ist doch mal was.

Oder soll der ISDN-Router den Bildschirm löschen?

nein nicht der ISDN-Router, dafür mein expect Skript ;) und dem steht auch kein clear bzw. tput zur Verfügung - warum auch immer?? Denn interaktiv kann ich clear anwenden.

Leite des Ausgabe von clear in eine Datei um ("clear >datei"). Dann schaust Du Dir die Datei mit einem Hexeditor an ("od datei"). Damit erhälst Du die Sequenz, die der Router an das Terminal schicken muss, um den Schirm zu löschen. Dieses Sequenz kann Du dann im Router eintragen. Allerdings muss Dir dieser die Möglichkeit zur Verfügung stellen, beliebige Ascii-Zeichen zu schicken und zu quoten.

steht mir zur Verfügung - das war ein super Tipp!! bloß 'od <file>' hat nicht wirklich geholfen,

'od -c <file>' war da aufschlussreicher ;)

Problematisch dabei ist allerdings, dass die Escape-Sequenz sich von Terminal zu Terminal unterscheiden kann.

Das ist bescheiden...dann ist es echt eine Überlegung wert doch einfach nur soviele Newlines einzufügen, um die Meldung unter die Ausgabe der Terminal Session zu setzen - auf Nebenwirkungen (wie z.B. dass es immer an andrer Stelle steht) kann ich halt dann nicht eingehen, schade auch.

FF ist die Abkürzung für "Form Feed" (Zeilevorschub). Du kannst versuchen, die passende Anzahl an FF/CRs zu schicken. Das entspricht aber nicht wirklich einem "clear", da der Cursor am Ende des Terminal steht.

Sehr gut, das ist eine Idee, bloß habe ich es in meinem Skript mit "\ffDone." probiert, doch dies führt nicht zum erwünschten ergebnis muss ich da echt sagen "\012" (octal), oder wie bekomm ich das hin - "\f" halt auch nix.

Nunja du hast mir schon sehr weitergeholfen mit den Tipps

Ich habs nurn folgendermaßen hinbekommen:

CLEAR="\033\133\110\033\133\112" (steht für: ESC [ H ESC [ J )

puts stderr "$CLEAR\rError: Telnet Password is wrong! Authentification failed."; exit 1;

Wäre mir aber noch recht, wenn du mir noch mit dem form feet weiterhelfen könntest, ich such nach ner andren Variante als FF="\012"; puts "$FF\Error......"

Vielen Dank

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...