Diese Frage beschäftigt mich seit einigen Tagen und hier ist mein bearbeiteter Beitrag mit all dem Material, das ich gelernt habe. Insbesondere war es mein Ziel, das Anzeigen der Uhrzeit neben der Eingabeaufforderung in BASH zu erreichen. Genau wie bei Radu Radeanu, der in seiner Antwort erwähnt wurde, müssen Sie eine Funktion oder Variable finden, mit der Sie die Eingabeaufforderung ständig aktualisieren oder den Bildschirm neu zeichnen können, ohne Ihren Bildschirm oder Ihre Eingabe zu beeinträchtigen. Während dies mit einer while-Schleife möglich ist, wie durch G_P gezeigt, verschlechtert das ständige Neuzeichnen des Bildschirms mit der tput-Funktion den Text, der sich zum Zeitpunkt der Aktualisierung auf meinem Bildschirm befindet. Ich bin dem, was das OP verlangte, ziemlich nahe gekommen, indem ich den Code, den G_P gepostet hat, etwas modifiziert habe, aber ich glaube immer noch, dass Radus Antwort dem am nächsten kommt, was das OP will. Ohne weiteres, hier sind einige der Dinge, die ich
# 1, Meine bevorzugte Lösung: Terminal Multiplexer
Terminal-Multiplexer ist eine Software, mit der der Terminal-Bildschirm in zwei oder mehr Bildschirme aufgeteilt werden kann. Insbesondere möchte ich auf das Byobu-Terminal aufmerksam machen. Mit diesem ncurses-basierten Terminalemulator können Sie Zeit, CPU-Prozentsatz, Arbeitsspeicher und eine ganze Reihe anderer Indikatoren anzeigen. Auf dem Screenshot meines Byobu-Terminals sehen Sie die CPU-Temperatur, den Akku-Prozentsatz, die Qualität der Internetverbindung, die CPU-Frequenz, den Arbeitsspeicher, das Datum und natürlich die Uhrzeit. Wenn Sie sich hauptsächlich mit der ständigen Überwachung dieser Dinge beschäftigen, während Sie im Terminal sind, ist Byobu der richtige Weg. Tatsächlich hat es mir so gut gefallen, dass ich es so eingestellt habe, dass es automatisch geladen wird, wenn ich mich bei tty anmelde. Der einzige Nachteil ist, dass Sie die einzelnen Fenster nicht zusammenführen können. Wechseln Sie nur mit den Tasten F3 und F4 zwischen den Registerkarten.
Eine alternative Lösung für das Multiplexen von Fenstern ist die Verwendung von splitvt
, die den Bildschirm in zwei Teile aufteilt. Sie können eine Terminaluhr ausführen, z. B. den tty-clock
Befehl watch with date, oder Sie können selbst eine mit einem Skript codieren. Dazu später mehr. Im Screenshot sehen Sie einen Teil der Aufteilung mit der normalen Bash-Eingabeaufforderung oben und im unteren Teil sehen Sie ein Skript, das die Ausgabe von date
Befehlen mit Befehlen ständig aktualisiert clear
.
# 2, While Do Loop und tput
Dies ist wahrscheinlich der Schlussel zu dem, was die Person, die die Frage gestellt hat, mit bash implementiert haben wollte.
G_P hat eine großartige Lösung für die Befehle while do
und veröffentlicht tput
. In G_Ps Code gab es jedoch zwei Dinge, die mir nicht gefielen. Erstens war die Uhr rechts von der Eingabeaufforderung und zweitens - da der Ruhezustand 1 Sekunde beträgt (siehe Originalcode, in dem Sleep angegeben ist), wird der Bildschirm jede Sekunde neu gezeichnet, was meine Ausgabe durcheinander bringt. Was ich getan habe, ist, meine Bash-Eingabeaufforderung so zu bearbeiten, dass sie mit dem Operator \ n eine Zeile tiefer liegt, und den Code von G_P so zu ändern, dass der Operator tput die Uhr direkt über der Eingabeaufforderung positioniert und alle 60 Sekunden aktualisiert. Auf diese Weise kann ich Stunden und Minuten sehen (und Minuten sind mir eigentlich egal), während die Schleife der Uhr meinen Bildschirm nicht durcheinander bringt. Hier ist meine Eingabeaufforderung:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
Und hier ist der geänderte Code von G_P: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
Kleine Änderung : Mir ist aufgefallen, dass der obige Code die Uhr manchmal nicht sofort aufruft. Hier ist eine bessere Version: while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
Hier wird die Uhr zuerst auf dem Bildschirm angezeigt und dann der 60-Sekunden-Schlafzyklus angezeigt
Beachten Sie, dass der Wert tput cup 0 0 die Uhr in der oberen rechten Ecke des Bildschirms direkt über meiner Eingabeaufforderung platziert und sleep 60 den Schlafzyklus auf 60 Sekunden ändert, da ich auf diese Weise nur Stunden und Minuten statt jeder Sekunde überwachen kann. Auf diese Weise wird der Text, den ich auf dem Bildschirm habe, größtenteils nicht beeinflusst (nur wenn ich zufällig einen Befehl ausführe, wird die Uhrzeit aktualisiert).
Die PS1-Zeile befindet sich bereits in Ihrem .bashrc-Profil, daher müssen Sie sie nur ein wenig anpassen. Die while-do-Schleife sollte an einer beliebigen Stelle in derselben Datei eingefügt werden, vorzugsweise am Ende mit dem Kommentar #, dass dies das ist, was Sie anfangs hinzugefügt haben. Und vergessen Sie nicht, immer eine solche Datei zu sichern, nur für den Fall, dass Sie bubu machen und zu dem Zustand zurückkehren müssen, wie er war.
# 3, Scripting und andere
Dieser Teil ist nur für diejenigen, die Zeit sehen wollen. Für diejenigen, die es ständig überwachen möchten, sind # 1 und # 2 bevorzugte Optionen.
Wie wir bereits gesehen haben, ist die while-do-Schleife ziemlich nützlich. Mit den Befehlen while do loop, date und sleep können Sie eine Uhr erstellen.
Wenn Sie die Eingabetaste drücken, wird die Ausgabe des Datums-Befehls im Sekundentakt auf dem gelöschten Bildschirm angezeigt. Wenn Sie das nicht jedes Mal eingeben möchten, wandeln Sie all diese Dinge in ein Skript um:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Jetzt können Sie dieses Skript mit splitvt in einer Instanz von bash ausführen, während Sie in der anderen arbeiten.
Eine andere Lösung ist der watch -n1 date
Befehl, der kontinuierlich einen Datumsbefehl mit einer Dauer von 1 Sekunde ausführt.
Fazit: Ich habe einige Dinge gelernt, als ich versucht habe, eine Antwort auf diese Frage zu finden, und ich hoffe, meine Erkenntnisse haben Ihnen in gewisser Weise geholfen, und ich hoffe, ich konnte zu dieser Frage einen Beitrag leisten. Das Byobu-Terminal IMHO ist die beste Lösung, aber entscheiden Sie selbst, recherchieren Sie und wählen Sie den für Sie am besten geeigneten Weg.
Einige der Dinge, die ich bei meinen Recherchen gefunden habe:
Mein ursprünglicher Beitrag, die minimalistische Lösung: Bearbeiten Sie Ihre ~ / .bashrc-Datei. Ich bearbeite es also lieber mit Nano
nano ~/.bashrc
Hier ist der Teil meiner eigenen bearbeiteten Datei:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
Nach else wird die erste Zeile mit # auskommentiert (das ist meine alte Eingabeaufforderung), jetzt ist die zweite Zeile die gewünschte und speziell der \t
Operator. Das zeigt die Laufzeit im 24-Stunden-Format. Für weitere Informationen überprüfen diese . Auch eine kleine Anmerkung, ich benutze das Zeug nach dem anderen, weil ich keine farbige Eingabeaufforderung benutze.
PS: Bitte lassen Sie mich wissen, ob ich etwas zu meiner Antwort hinzufügen oder auf irgendeine Weise bearbeiten sollte, aber ich glaube, dass dies größtenteils die schlüssigste Antwort ist, die ich finden konnte, und zumindest werde ich persönlich nichts hinzufügen neu dabei.
$PS1
Variable (Eingabeaufforderung) so einstellen , dass sie die Uhrzeit anzeigt, aber ich bin mir nicht sicher, ob Änderungen vorgenommen wurden.