Bash

time <command> 在 zsh 中與在 bash 中不同

  • January 17, 2020

time <command>bash 中的格式:

$time ./test.sh

real    0m0.000s
user    0m0.006s
sys     0m0.000s

在 zsh 中:

$time ./test.sh                                                       
./test.sh  0.01s user 0.00s system 94% cpu 0.007 total

當我切換到 zsh 時,這一直困擾著我。如何使timezsh 的輸出像 bash?

time關鍵字 in以變數指定的zsh格式產生輸出TIMEFMT

該變數的預設值為

%J  %U user %S system %P cpu %*E total

您可以像這樣更改它,例如:

TIMEFMT=$'%J\n%U user\n%S system\n%P cpu\n%*E total'

(這實際上只是在預設格式字元串中插入了幾個換行符)

這給出了以下類型的輸出:

$ time sleep 2
sleep 2
0.00s user
0.00s system
0% cpu
2.010 total

或者,更接近於bash

$ TIMEFMT=$'real\t%E\nuser\t%U\nsys\t%S'
$ time sleep 2
real    2.02s
user    0.00s
sys     0.01s

TIMEFMT請參閱手冊中變數的文件zshparam

我的系統上(執行 zsh 5.7.1),這顯示

  TIMEFMT
         The format of process time reports with the time keyword.  The
         default is `%J  %U user %S system %P cpu %*E total'.  Recognizes
         the following escape sequences, although not all may be
         available on all systems, and some that are available may not be
         useful:

         %%     A `%'.
         %U     CPU seconds spent in user mode.
         %S     CPU seconds spent in kernel mode.
         %E     Elapsed time in seconds.
         %P     The CPU percentage, computed as 100*(%U+%S)/%E.
         %W     Number of times the process was swapped.
         %X     The average amount in (shared) text space used in
                kilobytes.
         %D     The average amount in (unshared) data/stack space used in
                kilobytes.
         %K     The total space used (%X+%D) in kilobytes.
         %M     The  maximum memory the process had in use at any time in
                kilobytes.
         %F     The number of major page faults (page needed to be
                brought from disk).
         %R     The number of minor page faults.
         %I     The number of input operations.
         %O     The number of output operations.
         %r     The number of socket messages received.
         %s     The number of socket messages sent.
         %k     The number of signals received.
         %w     Number of voluntary context switches (waits).
         %c     Number of involuntary context switches.
         %J     The name of this job.

         A star may be inserted between the percent sign and flags
         printing time (e.g., `%*E'); this causes the time to be printed
         in `hh:mm:ss.ttt' format (hours and minutes are only printed if
         they are not zero).  Alternatively, `m' or `u' may be used
         (e.g., `%mE') to produce time output in milliseconds or
         microseconds, respectively.

引用自:https://unix.stackexchange.com/questions/562650