Statuszeile in der Linux-Shell

3378
Alex

Ich verwende Windows und Putty, um eine Remote-Verbindung (SSH) zu einigen Linux-Servern herzustellen. Ich habe meinen Hardstatus in meiner .screenrc-Datei festgelegt, damit ich einige nützliche Informationen überwachen kann. Das funktioniert aber nur, wenn ich im Bildschirm bin.

Ich möchte dasselbe außerhalb von Screen verwenden. Im Grunde möchte ich eine Statusleiste haben (ähnlich der Screen-Statusleiste), wenn ich mich auf meiner Bash-Shell außerhalb des Bildschirms befinde.

Ist das überhaupt möglich? Wie kann ich es tun? Wenn nicht, gibt es eine Alternative?

PS: Mein Ziel ist es, die aktuelle Uhrzeit und die Frist für die Erneuerung meines Zugriffs auf den Server in einer Statusleiste anzuzeigen.

3
Bash hat keine Statusleiste. Sie können die gewünschten Informationen in der Bash-Eingabeaufforderung anzeigen. DavidPostill vor 9 Jahren 1

2 Antworten auf die Frage

2
Edward

Coole Frage. Soweit ich weiß, kann man das nicht allein mit Bash machen, wie David Postill sagte. Aber wie er vorschlug, könnten Sie die Eingabeaufforderung (ab) für diesen Zweck verwenden. Hier ein Beispiel mit ANSI-Escape-Sequenzen, um den Effekt einer Statusleiste zu erzielen :-)

PS1='\[\e[s\e[1;1H\e[41;1m\e[K\e[33;1m\][ *** \t *** ]\[\e[0m\e[u\]\w> ' 

Dieser zeigt nur die aktuelle Uhrzeit in der Statusleiste an und zeigt auch eine normale Aufforderung an. Ein paar Anmerkungen:

  • \e[ führt die meisten Sonderbefehle ein
  • \e[s speichert die aktuelle Cursorposition
  • \e[1;1H positioniert den Cursor in Zeile 1, Spalte 1
  • \e[...m Farben ändern (Vorder- und Hintergrundfarbe)
  • \e[K löscht bis zum Zeilenende
  • \e[u stellt die Cursorposition wieder her
  • \[und \]begrenzen Sie nicht druckbare Zeichen in der Aufforderung. Sie lassen Bash die genaue Länge der Eingabeaufforderung berechnen. Sie könnten prinzipiell ohne diese auskommen, aber dann würde die Aufforderung in einem mehrzeiligen Befehl nicht korrekt aktualisiert werden (sehen Sie jedoch die Nachteile unten).

Ich schlage nicht vor, dass Sie diese Lösung ernst nehmen. Es hat gravierende Nachteile:

  1. Es ist schwer zu lesen und brüchig
  2. Die Statusleiste wird nur aktualisiert, wenn die Eingabeaufforderung aktualisiert wird. dh wenn die Kontrolle an die Shell zurückkehrt (wenn ich Ihre Frage lese, ein sehr großer Nachteil)
  3. Mehrzeilige Befehle werden nicht richtig angezeigt (Cursor wird in der ersten Zeile neu gestartet)

Aber ich hoffe, es gefällt euch! :)

Ok, und nun zu der ernsthaften Antwort ;-) (Ich entdeckte diese Sekunden, nachdem ich meine ursprüngliche Antwort gefunden hatte. Aber ich habe immer noch die alte Antwort, nur zum Spaß.) Ich denke, Sie könnten folgendes verwenden: https: // powerline.readthedocs.org/de/latest/usage/shell-prompts.html#bash-prompt. Haftungsausschluss: Ich habe es nicht getestet! Edward vor 9 Jahren 0
0
neil

cyberninja216:

PS1 = '[\ e [s \ e [1; 1H \ e [41; 1m \ e [K \ e [33; 1m] [backtickhere curl ipinfo.io 2> / dev / null | grep -m 1' " ip "backtickhere] [\ e [0m \ e [u] \ w> '

Beachten Sie die Backticks, um eine Befehlsausgabe zu analysieren. "für Live-Feed verwenden"

Können Sie das etwas näher erläutern? Toto vor 6 Jahren 0