Hinzufügen von Zeitstempeln zu Terminalansagen?

53

Ich habe mich gefragt, ob es möglich ist, Zeitstempel zu Terminal-Eingabeaufforderungen hinzuzufügen, und wenn ja, wie kann ich dies erreichen?

Jan Gorzny
quelle
Überprüfe diesen Link , um die laufende Uhr synchron anzuzeigen
Mana

Antworten:

60

Fügen Sie diese Zeile zur ~/.bashrcDatei hinzu:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Die Ausgabe wird also ungefähr so ​​aussehen:

[07:00:31] user@name:~$
devav2
quelle
Manchmal stelle ich fest, dass die Zeit nicht stimmt und älter ist, als ob es eine Verzögerung gäbe. Ich dachte, ich könnte es verwenden, um zu sehen, wie lange bestimmte Befehle dauern (grunzen ..). Wie kann das sein?
Kevin Simper
2
@ devav2: Gibt es eine Möglichkeit, die Zeitzone anzugeben?
Hippo
Gibt es eine Möglichkeit, dem Terminal einen Zeitstempel hinzuzufügen, wenn Sie root verwenden? Ich habe nur den Zeitstempel, wenn ich ein normaler Benutzer bin. Danke
Yufenyuy Veyeh Dider 14.
4
Für den dateBefehl können Sie ersetzen +%H:%M:%Smit +%T.
Snapfractalpop
5
Das mit meinem Terminal Verpackung geschraubt, so habe ich den Ansatz detailliert hier statt.
Füge
25

Meine Lösung bestand darin, mit http://bashrcgenerator.com/ diese PS1-Zeile zu generieren, um sie in .bashrc einzufügen:

export PS1="\t [\u@\h \W]\\$ \[$(tput sgr0)\]"

Welches wird aussehen

13:05:54 [chad@work-laptop:~/Downloads]$ ls -al

Durch die Verwendung von PROMPT_COMMAND wird der Verlauf für mich durcheinander gebracht. Wenn beim Durchlaufen des Verlaufs eine längere Zeile angezeigt wird, wird das Ende der Eingabeaufforderung um die gleiche Anzahl von Zeichen gekürzt wie der Zeitstempel, der an der Vorderseite hinzugefügt wurde. z.B

13:14:38 [chad@work-laptop:~/Doexport PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\\] "

Und diese Zeile kann nicht bearbeitet werden, da die Zeichen nicht an der richtigen Stelle angezeigt werden, da Sie nicht dort tippen, wo Sie anscheinend tippen.

Ich vermute, es könnte mit PROMPT_COMMAND gemacht werden, vielleicht mit diesem [$ (tput sgr0)] - Teil, aber PS1 funktioniert.

dogtato
quelle
Der Link hier ist großartig, um Briefmarken weiter anzupassen.
Cellepo
16

Anstatt das Datum der Eingabeaufforderung selbst hinzuzufügen, können Sie das Datum auch direkt vor Ihrer Eingabeaufforderung einfügen, indem Sie die folgende Zeile oben in Ihre Zeile einfügen .bashrc. Für die Arbeit müssen Sie auch installieren cowsay. Auf spielerische Weise können Sie das Datum anzeigen, während Sie eine kurze Eingabeaufforderung einhalten:

cowsay "Welcome $USER! It's now $(date '+%A %B %d %Y %r')"

In seiner aktuellen Form wird es auf jedem System ohne Änderung funktionieren, während es die $USERund die dateVariable aus der aktuellen Umgebung liest .

Bildbeschreibung hier eingeben


quelle
8
Wenn Sie es in die Eingabeaufforderung einfügen, müssen Sie wissen, wann Sie zuletzt einen bestimmten Befehl ausgeführt haben.
James Oltmans
6

Da ich nicht genug Reputationspunkte habe, um der Antwort einen Kommentar hinzuzufügen, um sie zu verbessern. Die einzige Möglichkeit, Informationen hinzuzufügen, besteht darin, eine zweite Antwort zu erstellen. Also werde ich wiederholen, was als Antwort gesagt wurde, und darauf aufbauen.

Bearbeiten Sie die .bashrc-Datei für den Benutzer, für den Sie den Datumsstempel ändern möchten.

Wenn Sie "user @ host: ~ $" sehen, befinden Sie sich im Home-Verzeichnis Ihres aktuellen Benutzers. Die .bashrc-Datei ist eine versteckte Datei, da ihr der Punkt "." Vorangestellt wird. Um es in einer Liste anzuzeigen, müssen Sie eine lange Liste verwenden.

Sie können "ls -a" verwenden und sollten dann die ".bashrc" -Datei sehen.

Bearbeiten Sie die Datei mit einem Texteditor. Zum Beispiel "nano .bashrc", "vim .bashrc", "vi .bashrc", "pico .bashrc" oder welcher Editor auch immer Sie verwenden möchten.

Wenn Sie dieses Skript erstellen und es für viele Benutzer zu vielen Shells hinzufügen möchten, kann es hilfreich sein, den Befehl "echo" in Verbindung mit dem Operator ">>" anhängen zu verwenden. Zum Beispiel,

echo "export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"" >> .bashrc

Wenn Sie diese Methode verwenden, vergewissern Sie sich, dass Sie sich im aktuellen Arbeitsverzeichnis des Benutzers befinden, für den Sie sie ändern möchten. Um dies zu überprüfen, können Sie den Befehl "pwd" oder "print working directory" verwenden.

Wenn Ihnen der zusätzliche Abstand zwischen der Endklammer "]" und dem Benutzernamen nicht gefällt, verwenden Sie einfach diesen leicht geänderten regulären Ausdruck:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"

Verwenden Sie diese Option, wenn Sie die Datei direkt bearbeiten.

Avlaxis
quelle
1
Sie können Änderungen vorschlagen.
muru
4
export PROMPT_COMMAND=date

druckt das Datum aus, bevor jede Eingabeaufforderung ausgegeben wird.

wojox
quelle
1

Öffnen Sie Ihre .bashrcVia

vim ~/.bashrc

und fügen Sie dann Folgendes hinzu .bashrc:

#PS1="[\A \u@\h \W\a]$" 

Wo \Aist für die Zeit ( \Wnur für das Ende des Pfads, entfernen Sie, wenn Sie den gesamten aktuellen Arbeitsverzeichnispfad möchten). Dann tippe

source ~/.bashrc

Sie werden so etwas sehen:

[16:04 trwood@cobalt04 ~/MCEq_dev]$
trwood
quelle
1
Beim Entfernen \Wwird überhaupt kein Pfad angezeigt. \wwird den vollen Weg geben.
Zanna
0

Nur um die Antwort von @ devav2 zu ergänzen:

Ein einfacher zu lesender Echobefehl für Neulinge wäre:

export PROMPT_COMMAND='echo -n "$(date +%H:%M:%S) "'

Anstatt von

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Da der Echo-Befehl zum Zeitpunkt des Exports nicht ausgewertet werden soll, ist es sinnvoller, einfache Anführungszeichen für wörtliche Anführungszeichen anstelle von doppelten Anführungszeichen zu verwenden. Mit einfachen Anführungszeichen den gesamten Befehl zitieren , dann können Sie doppelte Anführungszeichen verwenden , um das Argument zu dem Echo - Befehl zu zitieren, entfällt die Notwendigkeit , wie Sonderzeichen zu entkommen , [und$

qwertyzw
quelle
1
Die Escape-Zeichen werden zur Formatierung verwendet (die Klammern). Ich verstehe nicht, was dies zur akzeptierten Antwort beiträgt.
Elder Geek
Sie können sie auch zu 'echo -n "$ (Datum +% H:% M:% S)"' hinzufügen: 'echo -n "[$ (Datum +% H:% M:% S)]"' ohne ihnen entkommen zu müssen. Der Vorteil der Verwendung eines Strings als Argument für den Echo-Befehl besteht darin, dass Sie jetzt nicht mehr das zu entziehen brauchen, was ansonsten als Bash auswertbar ist, was das Lesen erleichtert.
Qwertyzw
@ ElderGeek Ich habe weitere Klarstellungen hinzugefügt. Ich hoffe das hilft.
Qwertyzw
0

Ich denke, der richtige Weg, um fortzufahren, ist, in $HOME/.bashrcden Codes zu suchen PS1, die sie setzen , zu kommentieren und die persönlichen hinzuzufügen. Dies ist mein Block zum Beispiel:

PS1_DATE="\D{%Y-%m-%d %H:%M:%S}"

if [ "$color_prompt" = yes ]; then
    PS1="[$PS1_DATE \[\e]0; \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[\033[00m\]\[\033[01;34m\]\w \[\033[00m\]\$] "
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='[$PS1_DATE ${debian_chroot:+($debian_chroot)}\w \$] '
    #PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Ausgabe:

[2019-06-18 15:54:29 ~/Desktop $] echo "It's late!"
Marco Sulla
quelle
0

Die einfachste Syntax zum Anzeigen eines Zeitstempels in einer Eingabeaufforderung ist wahrscheinlich:

    PS1='\D{%F} \t $...'

wo

\D{format}ist man bashdatumsformatiert (siehe Abschnitt PROMPTING) als

%Fvollständiges Datum; man dateEntspricht % Y-% m-% d (siehe Abschnitt FORMATIEREN) und

\tist die aktuelle Uhrzeit im 24-Stunden-Format HH: MM: SS (siehe man bashAbschnitt PROMPTING)

nano ~/.bashrc

Nehmen Sie wie oben gezeigt Änderungen an PS1-Variablen vor

source ~/.bashrc
Dmitry Somov
quelle
0

Meine Zeit ist ähnlich wie die cowsayAntwort oben. Sie müssen nowIhre ~/.bashrceingeben, können sie aber auch vom Terminal aus durch Eingabe aufrufen now.

Hier ist ein Screenshot:

now.png

Der Bash-Code ist in dieser sehr detaillierten Antwort veröffentlicht:

WinEunuuchs2Unix
quelle
0
export PROMPT_COMMAND="echo -n \[\$(date +%F-%T)\]\ "
export HISTTIMEFORMAT="%F-%T "

sieht zumindest praktisch für mich aus.

Alexey Shcherbakov
quelle