Warum wirkt sich der Befehl „Unbuffer“ auf den Zeitbefehl aus?

Warum wirkt sich der Befehl „Unbuffer“ auf den Zeitbefehl aus?

Mir ist etwas Merkwürdiges aufgefallen, als ich den Befehl „unbuffer“ mit dem Befehl „time“ verwendet habe. Hier möchte ich nur sehen, wie lange es dauert, eine bestimmte Datei in meinem System zu finden:

time find . -name unixstuff

Die Ausgabe ist:

./Documents/CProgramming/2031/unix/Awk/unixstuff
0.011u 0.173s 0:00.38 47.3%     0+0k 0+0io 0pf+0w

aber wenn ich unbuffer vor diesen Befehl schreibe, lautet die Ausgabe:

./Documents/CProgramming/2031/unix/Awk/unixstuff
0.01user 0.17system 0:00.38elapsed 47%CPU (0avgtext+0avgdata 4656maxresident)k
0inputs+0outputs (0major+338minor)pagefaults 0swaps

Beachten Sie, dass 0,17s auf 0,17system erweitert wird und andere Kurzschrifterweiterungen vorgenommen wurden. Ich würde gerne wissen, warum diese Verhaltensänderung auftritt. Ich möchte keine unvorhersehbare Ausgabe in meinen Pipes.

Antwort1

Das liegt daran, dass das timeim ersten Befehl ein Shell-Schlüsselwort ist. Das timeim zweiten Befehl ist die ausführbare Datei. Sehen Sie sich die typeAusgabe von an time:

$ type -a time
time is a shell keyword
time is /usr/bin/time

Der Befehl unbufferbenötigt als Argument ein Programm, kein Shell-Schlüsselwort. Er kann kein Shell-Schlüsselwort interpretieren, da es sich um ein bashinternes Schlüsselwort handelt.

Und der Unterschied in der Ausgabe, den Sie sehen, ist der Unterschied zwischen diesen beiden Implementierungen des timeBefehls. Verwenden Sie einfach den absoluten Pfad im ersten Befehl, damit Sie dasselbe Verhalten wie im zweiten erhalten:

/usr/bin/time find . -name unixstuff

verwandte Informationen