带有管道的 Unix“time”命令不打印时间报告

带有管道的 Unix“time”命令不打印时间报告

在下面的两个 C-shell 别名中,只有第一个打印时间命令的已用时间报告。如何获取带有管道的别名以打印时间报告?

alias make1 'time make'

alias make2 'time make |& tee make.log'

答案1

时间C shell(csh 或 tcsh)内置的命令不支持管道。要避免此限制,请使用独立的时间命令,通常位于 /usr/bin/time(如果不是,请尝试whereis time找到它)。

time在命令行中将更改为/usr/bin/time(或/usr/bin/time -p) 或时间程序的路径,它就应该可以工作。


为什么没有奏效:

C shell(和其他一些 shell 一样)有一个内置的时间命令(参见内置请参阅手册页),优先使用非内置(独立)时间程序:

% which time
time: shell built-in command.
% 

csh 的手册页(实际上我的系统上的 tcsh)状态为:

time [command]
   Executes command (which must be a simple command, not an alias,
   a pipeline, a command list or a parenthesized command list) ...

/usr/bin/time 命令没有这个限制,内置的时间大多数其他 shell 的命令,例如 bash 或 zsh。

答案2

你是想在这里使用管道吗?你实际上做的是将第二个time命令的结果通过管道传输到tee。这就是为什么你的结果没有被打印出来 - 它实际上可能被写入 make.log。

相关内容