在將 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