2016-11-09 2 views
3

time scheint im Allgemeinen auf meinem System zu arbeiten:Warum funktioniert `time` nicht auf` echo`?

➜ ~ time touch tmp.txt 
touch tmp.txt 0.00s user 0.00s system 54% cpu 0.007 total 

Doch scheint seine Ausgabe unterdrückt werden, wenn ich zu time echo versuchen.

➜ ~ time echo 

und die Handlung zu verdicken: es scheint, seine Fähigkeit, sich zu erholen echo zu messen, vorausgesetzt, ich werfe, dass echo in eine Pipeline:

➜ ~ time echo | xxd  
00000000: f09f 8d94 0a        ..... 
echo 0.00s user 0.00s system 38% cpu 0.002 total 
xxd 0.00s user 0.00s system 88% cpu 0.003 total 

Was ist los? Ist echo Ausgabe auf time Lieblings-Stream, ersetzt seinen Bericht?

Bonuspunkte für: Gibt es einen Weg (z. B. Stream-Umleitung) zu machen time echo Ausgabe der üblichen Bericht?


Edit: Einige Kommentatoren haben darauf hingewiesen, dass ich zsh verwende. Das habe ich damals nicht bemerkt, aber das erklärt viel.

bash verwendet normale ausführbare Dateien zu tun time und echo.

bash-3.2$ which echo 
/usr/local/opt/coreutils/libexec/gnubin/echo 
bash-3.2$ which time 
/usr/bin/time 

(Sieht aus wie ich bin eine GNU-Version von echo anstatt die vermutlich BSDs verwenden, /bin/echo, das kommt mit Mac OS X).

Während zsh bietet etwas wesentlich speziellere:

➜ ~ which echo 
echo: shell built-in command 
➜ ~ which time 
time: shell reserved word 

Beides sind normale ausführbare Dateien. Sehr interessant!

+2

sieht es so aus, als ob Sie 'zsh' verwenden, nicht' bash'. – webb

+0

Ich kann Ihr Problem nicht reproduzieren. Es funktioniert für mich wie erwartet mit macos sierra bash 3 und OEL 6.7 bash 4. – alvits

+0

Funktioniert gut in Bash 3.2.52 und so ist es wahrscheinlich keine bash Frage –

Antwort

3

Dies scheint zu passieren, wenn Sie die integrierte time (die eine vollständige Pipeline misst) kombiniert mit einem anderen integrierten Befehl, wie echo, true.

Seltsamerweise konnte ich keine Erwähnung dieser in der zshall man page finden.

um es zu umgehen, dies auszuführen:

time command echo 

Das commandprecommand Modifikator ruft das externe Echo anstelle des eingebauten in einem.

Verwandte Themen