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
、シェルキーワードが最初のコマンドにあるためです。time
2番目のコマンドは実行可能ファイルです。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