PS1 anstelle von date verwenden

Post Reply
Message
Author
User avatar
killerhippy
Posts: 529
Joined: 19. May 2000 19:36
Contact:

PS1 anstelle von date verwenden

#1 Post by killerhippy »

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

Code: Select all

\t
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 Post by PDA »

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: Select all

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

Code: Select all

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

User avatar
killerhippy
Posts: 529
Joined: 19. May 2000 19:36
Contact:

#3 Post by killerhippy »

@PDA: Komisch, bei mir nicht:

Code: Select all

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 Post by PDA »

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: Select all

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]?

User avatar
killerhippy
Posts: 529
Joined: 19. May 2000 19:36
Contact:

#5 Post by killerhippy »

PDA wrote: 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: Select all

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 Post by PDA »

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++!

User avatar
killerhippy
Posts: 529
Joined: 19. May 2000 19:36
Contact:

#7 Post by killerhippy »

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
Posts: 430
Joined: 03. Mar 2006 23:16

#8 Post by komsomolze »

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

Post Reply