為什麼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.17system,並且還發生了其他速記擴展。我想知道為什麼會發生這種行為改變。我不希望管道中出現不可預測的輸出。

答案1

這是因為time第一個指令中的 是 shell 關鍵字。time第二個指令中的是可執行檔。查看type輸出time

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

這個指令unbuffer需要一個程式作為參數,而不是 shell 關鍵字。它無法解釋 shell 關鍵字,這是一個bash內部關鍵字。

您看到的輸出的差異是該time命令的這兩種實現的差異。只需在第一個命令中使用絕對路徑,即可獲得與第二個命令相同的行為:

/usr/bin/time find . -name unixstuff

相關內容