Die Manpage von Bash listet drei und nur drei Formatcodes auf, die von der integrierten Version der Shell erkannt werden time
: %R
für die Echtzeit, %U
für die im Benutzerbereich verbrachte Zeit und %S
für die in Systemaufrufen verbrachte Zeit. Das folgende Verhalten ist also gelinde gesagt verwirrend:
$ type time
time is a shell keyword
$ TIMEFORMAT="%E %P"
$ time sleep 1
1.002 0.00
Offensichtlich wurde auf der Manpage etwas ausgelassen. Das integrierte Attribut time
erkennt %E
und %P
. Ich habe jedoch alle anderen Groß- und Kleinbuchstaben überprüft und keiner davon wird erkannt, außer l
als Modifikator:
$ TIMEFORMAT="%lE %lS %lU %lR"
$ time sleep 1
0m1.001s 0m0.000s 0m0.000s 0m1.001s
Ich bin neugierig und möchte wissen, was hier vor sich geht. Handelt es sich hier wirklich nur um eine Auslassung in der Manpage oder stimmt mit meiner Bash etwas nicht? Kann mir im Idealfall jemand eine Dokumentation zeigen, in der das erklärt wird? Ich verwende Bash 4.2.48(1) auf Gentoo amd64 stabil, falls das wichtig ist.
Antwort1
Von demAbschnitt von execute_cmd.c
vonbash-4.2+dfsg
das sich mit Folgendem beschäftigt TIMEFORMAT
:
if (*s == 'R' || *s == 'E')
len = mkfmt (ts, prec, lng, rs, rsf);
else if (*s == 'U')
len = mkfmt (ts, prec, lng, us, usf);
else if (*s == 'S')
len = mkfmt (ts, prec, lng, ss, ssf);
else
{
internal_error (_("TIMEFORMAT: `%c': invalid format character"), *s);
free (str);
return;
}
Aus dem oben Gesagten geht also hervor, dass dies %E
dasselbe bedeutet wie %R
: verstrichene (echte) Zeit.
Ich habe etwas Ähnliches in GNU gesehen sed
. Die -r
Option ist als Aktivierung der erweiterten regulären Ausdrücke von sed dokumentiert. Eine nicht dokumentierte Funktion tut -E
dasselbe. In diesem Fall ist der Zweck klar: Dies sorgt für Kompatibilität mit dem Flag, das BSD für erweiterte reguläre Ausdrücke verwendet. Ein möglicher Grund, es nicht zu dokumentieren, wäre, dass es GNU die Möglichkeit gibt , es in Zukunft für etwas anderes sed
zu verwenden . Die Gründe dafür , TIMEFORMAT zuzulassen, es aber nicht zu dokumentieren, könnten ähnlich sein.-E
%E