PS1 anstelle von date verwenden

Antworten
Nachricht
Autor
Benutzeravatar
killerhippy
Beiträge: 529
Registriert: 19. Mai 2000 19:36
Kontaktdaten:

PS1 anstelle von date verwenden

#1 Beitrag von killerhippy » 07. Apr 2010 12:55

Hi, diesmal habe ich eine Frage an die bash gurus.

Ich mache mir Gedanken darüber, ob ich in einem Script die Bash
Promptvariable PS1 auswerten kann, wenn ich sie auf setze und mir so
einen Aufruf von date im script sparen kann um die Uhrzeit zu ermitteln.

Jedoch finde ich nichts darüber, wie ich die PS1 Variable interpretieren
lassen kann anstelle von anzeigen.

echo $PS1 ergibt ja nur wieder "\t" und nicht wie gewünscht die Uhrzeit.

echo -e $PS1 interpretiert ja immerhin schon die Farbsequenzen (also
bestimmte backslash escapes um genau zu sein) meines Standardprompts,
leider aber nicht \t.

Was muss ich tun, um mir auch die anderen interpretieren zu lassen oder
auch nur \t wenigstens als ausgewertetes +HH:MM:SS?

cu
Sascha
Es gibt keine dumme Fragen!

Killerhippy

PDA

#2 Beitrag von PDA » 09. Apr 2010 23:17

Interessante Frage, aber mit ein wenig herum experimentieren habe ich eine (akzeptable) Lösung gefunden.
Du musst die PS1 Variable editieren indem du \t maskierst oder du verwendest 'date'.

Code: Alles auswählen

\\t
$(date +%H:%M:%S)

Code: Alles auswählen

echo -e $PS1 zeigt mir bei \t die Uhrzeit nicht an, bei \\t und bei date schon.
Hoffe das hilft.

Benutzeravatar
killerhippy
Beiträge: 529
Registriert: 19. Mai 2000 19:36
Kontaktdaten:

#3 Beitrag von killerhippy » 10. Apr 2010 15:00

@PDA: Komisch, bei mir nicht:

Code: Alles auswählen

sascha@home ~ $ echo -e $PS1
\[\]\u@\h\[\] \w \$\[\]
sascha@home ~ $ PS1='\\t'
\techo -e $PS1
\t
\tPS1='\t'
15:52:26
15:52:27echo -e $PS1

15:52:29
date möchte ich nicht verwenden (sofern es geht), weil es ein externes Programm ist, dass das Script aufrufen muss. Das kostet CPU Zeit und RAM und wenn ich das vermeiden kann, wäre es optimal.

PDA, welches Linux verwendest du? Ich bin hier bei Gentoo. Wenn es aber tatsächlich so wäre, dass bei dir 'echo -e $PS1' die Uhrzeit liefert, wenn PS1='\\t' und bei mir nicht, dann kann ich das Einbauen auch schon wieder knicken. - Wenn das nicht überall sicher funktioniert, kann ich es nicht verwenden.

Ich frage mich bloss, wie kann die Bash den Prompt mit Uhrzeit anzeigen und wieso steht diese von Bash ausgeführte Funktion dem User nicht zur Verfügung....
Es gibt keine dumme Fragen!

Killerhippy

PDA

#4 Beitrag von PDA » 10. Apr 2010 17:55

Muss ich bestätigen. Gestern habe ich das auf einem Debian probiert und es funktionierte, jetzt bin ich zu Hause und da funktioniert es auch nicht.

Code: Alles auswählen

uname -srmpio
Linux 2.6.31-gentoo-r10 x86_64 AMD Phenom(tm) II X4 945 Processor AuthenticAMD GNU/Linux

app-shells/bash-4.0_p37  USE="net nls -afs -bashlogger -examples -mem-scramble -plugins -vanilla"
Nachvollziehen kann ich es nicht, da ich mich nicht mit den Interna der Bash auskenne.

PS: Ruft die Shell bei \t nicht auch date auf?, ist \t nicht nur ein Alias für date [Option]?

Benutzeravatar
killerhippy
Beiträge: 529
Registriert: 19. Mai 2000 19:36
Kontaktdaten:

#5 Beitrag von killerhippy » 11. Apr 2010 15:55

PDA hat geschrieben: PS: Ruft die Shell bei \t nicht auch date auf?, ist \t nicht nur ein Alias für date [Option]?
Inzwischen habe ich es auf einem Gentoo u. einem Debian stable ausprobiert und konnte nirgends das gewünschte Ziel erreichen nach dem Motto:

Code: Alles auswählen

PS1='\\t'
DATE=$PS1
...DATE verarbeiten...
Wenn deine Vermutung \t riefe date auf stimmt, dann hat sich das Ganze sowieso erledigt. Bis zur Klärung bleibt die Antwort jedoch offen...
Es gibt keine dumme Fragen!

Killerhippy

PDA

#6 Beitrag von PDA » 19. Apr 2010 21:12

Wie gesagt, wie das intern funktioniert weiß ich nicht. Wenn es auf unterschiedlichen 'Systemen' mit verschiedenen Benutzern laufen soll, müsstest du ja auch sicher sein das in $PS1 auch ein \t drin steht um es dann (möglicherweise) zu verwenden.
Was hast du denn vor damit?
Abgesehen davon das ein 'date' nicht teuer ist, wahrscheinlich nicht teurer als es z.B. auf Kernelebene oder anders auszulesen.
Unter PERL gibt es sowas wie 'Time::gettimeofday()', funktioniert wohl ähnlich wie ctime unter C/C++!

Benutzeravatar
killerhippy
Beiträge: 529
Registriert: 19. Mai 2000 19:36
Kontaktdaten:

#7 Beitrag von killerhippy » 20. Apr 2010 0:50

Guckst du http://ubuntuforums.org/showpost.php?p= ... ount=12413

Da die Sekundenanzeige zeitkritisch ist (bei hoher Last u. langsameren Rechnern) und "springen" nicht so schön ist, wollte ich im Bashscript sowenig rechnen wie möglich. Sieht aber so aus, als käme ich um den date Aufruf nicht herum - naja, ist ja nur einer...
Es gibt keine dumme Fragen!

Killerhippy

komsomolze
Beiträge: 430
Registriert: 03. Mär 2006 23:16

#8 Beitrag von komsomolze » 01. Mai 2010 7:31

Das binary vcstime zeigt die Zeit in der Konsole oben rechts an,
bei debian im Paket console-tools, DO_VCSTIME=yes.
Dann brauchst Du kein ENTER :)

Mir reicht das PS1.
mfg komsomolze

Antworten