Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

21.02.2010, 20:32

Datums formatierung / Rechnen mit 'date'

moin moin!

ich habe mal wieder ne Frage an euch, da mir google nur Gruetze liefert. (Wobei auch mal wieder GIGO zutreffen koennte.)

Zu meiner Problematik:

Ich habe 2 Zeitstempel, die mit date +"%F_%T" zu Begin und am Ende eines Bashscriptes erzeugt werden. Und ich moechte nun diese beiden Zeiten von einander subtrahieren, um die Laufzeit des Scriptes in Minuten in ein Logfile zu posten.

Quellcode

1
2
3
4
5
6
7
#!/bin/sh
...
STRTtme=`date +"%F_%T"`
echo "script gestartet: ${STRTtme}" >> ${logfile}
...
ENDtme=`date +"%F_%T`
echo "script gestartet: ${ENDtme}" >> ${logfile}
gewuenscht ist das Ergebnis in Minuten von ${STRTtme} - ${ENDtme}

ich habe es unter anderem schon mit

Quellcode

1
echo $((${ENDtme} - ${STRTtime}))
probiert, falle aber auf die Nase, wegen des Formates und komme nicht weiter.
Wenn ich das Format von ${STRTtme} und ${ENDtme} von "%F_%T" in "%s" umwandeln koennte, waere das mit dem Rechnen nicht unbedingt das Problem. Daher suche ich nach einer Moeglichkeit diese (Um)Rechnung hinzubekommen.

Hat jemand einen Tip?
for Windows problems: reboot
for Linux problems: be root

Chucky the Devil

Pianist im Puff

  • »Chucky the Devil« ist männlich

Beiträge: 1 636

Wohnort: Koeln

Beruf: Network Architect

  • Nachricht senden

2

21.02.2010, 21:21

Schreib halt 'ne seperate Variable in die Du dann nochmal date mit '%s' den UNIX timestamp nimmst. Fuers log gibste die "Human readable" Zeiten aus und fuer die Berechnung nutzt Du die UNIX timestamps und gibts in Sekunden aus oder rechnest die Sekunden von mir aus auch in Minuten um. Oder Du nutzt z. B. Perl und Date::Manip.

3

21.02.2010, 21:31

Danke dir, fuer die Antwort.

Ich hatte beinahe befuerchtet, dass ich das so loesen musz.
- Schade.

Somit ist das mit dem Umrechnen der verschiedenen Formaten doch nicht so trivial.

Naja. dann halt eben so.

Danke nochmal.
for Windows problems: reboot
for Linux problems: be root

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

4

22.02.2010, 00:20

was spricht gegen time, das ist doch extra dafür da?
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

5

22.02.2010, 00:30

naja, ich wuerde mal sagen, der Aufruf von diversen Funktionen innerhalb des Scriptes und das damit verbundene Quoting. - Aber das ist auch nur vermutet.

oder klappt das mit einem Aufruf a la

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
time $(
     ..

     funktion1(){
          ....
     }

     funktion2(){
          ....
     }

     ende des Scriptes
)


das waere natuerlich auch aeuszerst praktikabel.

Bjoern
for Windows problems: reboot
for Linux problems: be root

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BorneBjoern« (22.02.2010, 00:32)


linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

6

22.02.2010, 00:36

ja, das geht, das dollarzeichen musst du natürlich weglassen, wenn es keine zuweisung gibt.
achtung, die kommandos laufen dann in einer subshell!!
ansonsten nimm die date %s methode.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

7

22.02.2010, 00:55

hmm das mit der Subshell sollte eigentlich keine Probleme verursachen.

Ich werd da gleich mal nen Test anwerfen.


THX Frank!
for Windows problems: reboot
for Linux problems: be root

8

22.02.2010, 01:07

hmm wohl doch nicht wirklich optimal, wenn ich die Ausgabe von time umleiten will.

Denn wenn ich am Ende des Scriptes den time Aufruf mit ")" schliesze und noch ein >> ${BUILDlog} anhaenge, bekomme ich als Fehlermeldung

Zitat

./kernel.sh: line 121: ${BUILDlog}: ambiguous redirect[/code]

also doch +%s...

[edit]

ich habe gerade herausgefunden, dass time seine Ausgabe an STDERR schickt.
Nur leider klappt die anhaengende (">>") Umleitung in eine Datei nicht. Nur die ueberschreibende (">") Umleitung in eine Datei. Und fuer ein Log ist das eher unguenstig. Wuerde es das Konstrukt funktionieren, wenn ich einen 3. Kanal definiere und diesen anschlieszend via ">>" in mein LogFile umleite?

[/edit]
for Windows problems: reboot
for Linux problems: be root

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BorneBjoern« (22.02.2010, 01:24)


9

22.02.2010, 14:23

Boah, das ist horror, mach das nich':

Quellcode

1
2
3
4
5
foo(){ # damit ist es IMHO übersichtlicher
    echo bar;
}

((time foo) 3>&1 1>&2 2>&3 | (echo '# das war stderr'; cat -; echo '# ende stderr')) 3>&1 1>&2 2>&3
Ich hoffe die Subshells bringen Dich nicht ins Irrenhaus.

Deine Fehlermeldung kommt wohl daher:

Quellcode

1
2
$ echo >$undefined 
bash: $undefined: ambiguous redirect
Die Variable mit dem Dateinamen für die Umleitung ist vermutlich in diesem Kontext nicht definiert.

strcat

Unix Gladiator

  • »strcat« ist männlich

Beiträge: 2 331

Wohnort: /Earth/Germany/Bavaria/Regensburg

  • Nachricht senden

10

22.02.2010, 14:53

Quellcode

1
time -o /tmp/timeout.txt command

Funktioniert allerdings nur mit GNU time; ansonsten nimm

Quellcode

1
(time command) 2> /tmp/timeout.txt

Oder gleich mit Perl wie Chucky (Hi! *g*) gesagt hat.
Christian 'strcat' Schneider <http://www.strcat.de/>
/* When all else fails, read the instructions. */

Thema bewerten