unbufferコマンドがtimeコマンドに影響するのはなぜですか?

unbufferコマンドがtimeコマンドに影響するのはなぜですか?

unbufferコマンドをtimeコマンドと一緒に使用したときに奇妙なことが見つかりました。ここでは、私のシステムで特定のファイルを見つけるのにどれくらい時間がかかるかを確認したいと思います。

time find . -name unixstuff

出力は次のとおりです

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

しかし、このコマンドが出力される前にunbufferに書き込むとき:

./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

0.17sが0.17システムに拡張され、他の短縮拡張も発生しました。これらの行動の変化が発生する理由を知りたいです。私はパイプラインで予測不可能な出力をしたくありません。

答え1

これはtime、シェルキーワードが最初のコマンドにあるためです。time2番目のコマンドは実行可能ファイルです。type出力ビューtime

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

このコマンドには、unbufferシェルキーワードではなくプログラムが引数として必要です。内部キーワードであるシェルキーワードを解釈できませんbash

表示される出力の違いは、timeコマンドの2つの実装間の違いです。最初のコマンドで絶対パスを使用すると、2番目のコマンドと同じ動作を得ることができます。

/usr/bin/time find . -name unixstuff

関連情報