zshのtimeと/usr/bin/timeが別物ってことに気づかずハマったので、メモ。
使い方としてはどちらも引数にコマンドを渡すと、そのコマンドの実行時間を出力してくれるというもの。
zsh
zshでtime
コマンドをそのまま使うとzshの提供するtimeが発動する。
$ which time
time: shell reserved word
で、このtime使うとこんな出力がされる
$ time sleep 1;
sleep 1 0.00s user 0.01s system 1% cpu 1.017 total
このフォーマットは環境変数TIMEFMT
に従う。
$ echo $TIMEFMT
%J %U user %S system %P cpu %*E total
これの意味はman zshparam
のTIMEFMTの項目で見れる。
timeコマンド自体の説明はman zshmisc
に載っている。man time
で見れるのは/usr/bin/timeの使い方であって別物。/usr/bin/timeで使えるようなオプションはない。
ちなみにREPORTTIME
という環境変数設定しておくと一定時間以上かかったコマンドの時間を出力してくれるが、このzshのtimeで出力される。
http://qiita.com/items/b72373f7e4bc79b13568
/usr/bin/time
こちらを使うと以下の様な出力になる。
$ /usr/bin/time sleep 1;
0.00user 0.00system 0:01.02elapsed 1%CPU (0avgtext+0avgdata 2080maxresident)k
0inputs+0outputs (0major+172minor)pagefaults 0swaps
こいつのフォーマットは環境変数TIME
に従う。TIMEが設定されてなかったら以下のフォーマットになる。
%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
%Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps
使い方やフォーマットの意味はman time
で見れる。多分大体zshのtimeと同じ。オプションが使える分高機能?
蛇足
「time コマンド」とかでぐぐって出てくるのは/usr/bin/timeの方ばっかりだし、man time
して出てくるのも/usr/bin/timeの使い方なのに、time
とコマンドを打つと思ったとおりに動いてくれなくて困ってた。
オプションは使えないし環境変数TIME
をいじっても出力変わらないし。
ほんと時間無駄にした(´・ω・`)