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 time
im ersten Befehl ein Shell-Schlüsselwort ist. Das time
im zweiten Befehl ist die ausführbare Datei. Sehen Sie sich die type
Ausgabe von an time
:
$ type -a time
time is a shell keyword
time is /usr/bin/time
Der Befehl unbuffer
benötigt als Argument ein Programm, kein Shell-Schlüsselwort. Er kann kein Shell-Schlüsselwort interpretieren, da es sich um ein bash
internes Schlüsselwort handelt.
Und der Unterschied in der Ausgabe, den Sie sehen, ist der Unterschied zwischen diesen beiden Implementierungen des time
Befehls. Verwenden Sie einfach den absoluten Pfad im ersten Befehl, damit Sie dasselbe Verhalten wie im zweiten erhalten:
/usr/bin/time find . -name unixstuff