time shell cmd unterschied?
-
kann mir das mal einer erklären, bitte
#!/bin/bash time ./main
ausgabe: real 0m0.006s user 0m0.008s sys 0m0.000s
#!/bin/sh time ./main
ausgabe: 0.00user 0.00system 0:00.00elapsed 133%CPU (0avgtext+0avgdata 3296maxresident)k 0inputs+0outputs (0major+245minor)pagefaults 0swaps
-
In Bash:
$ type time time is a shell keyword
time ist bei bash kein Programm, sondern ein keyword. Daher hängt es von der Shell ab, was time macht. /bin/sh ist bei dir scheinbar nicht bash.
-
Christoph schrieb:
/bin/sh ist bei dir scheinbar nicht bash.
nö, verlinkt auf dash. dass es ein keyword ist, erklärt natürlich einiges
dachte, time sei ein programm
-
time ist so ein bisschen ein Programm . Also unter bash gibt es das als builtin (so nennt sich das - nicht keyword). Unter dash wohl nicht. Bei mir (Fedora) gibt es ein /usr/bin/time. Wenn ich allerdings einfach nur time aufrufe, kommt das builtin zum tragen. Ich kann aber auch den vollen Pfad angeben:
$ time echo Hallo Hallo real 0m0.000s user 0m0.000s sys 0m0.000s
$ /usr/bin/time echo Hallo Hallo 0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 600maxresident)k 0inputs+0outputs (0major+185minor)pagefaults 0swaps
Dann sieht es so aus, wie bei Deiner dash-Variante.
-
tntnet schrieb:
time ist so ein bisschen ein Programm . Also unter bash gibt es das als builtin (so nennt sich das - nicht keyword).
Nein, time ist in bash kein builtin, sondern tatsächlich ein keyword.
Vergleiche echo mit time:
$ type echo echo is a shell builtin $ type time time is a shell keyword
time kann kein builtin sein, weil es sich anders verhält.
$ time echo hi &> /dev/null real 0m0.000s user 0m0.000s sys 0m0.000s
Wäre time ein builtin, müsste die Umleitung von stdout und stderr nach /dev/null auch die Ausgabe von time unterbinden. time kann seine Ausgabe aber loswerden (und zwar auf dem alten stderr), also kann time kein builtin sein.