4

Of the two C-shell aliases below, only the first prints the time command's report of elapsed time. How can I get the alias with the pipeline to also print the time report?

alias make1 'time make'

alias make2 'time make |& tee make.log'
Arne Stenström
  • 1,790
  • 1
  • 18
  • 18
Stan
  • 7,215
  • 35
  • 97
  • 142
  • 1
    @ArneStenström I approved the edit now – but please note that editing others' posts in such a radical way as proposed before (and now reflected in your comment) is *not encouraged*. Furthermore, you've already edited the question once. While I understand that you want to improve your posts more than once, please make your suggested edits count and only propose *one*. Thanks. – slhck Mar 12 '12 at 19:13

2 Answers2

7

The time command built-in to the C shell (csh or tcsh) doesn't work with pipelines. To avoid this limitation, use the standalone time command instead, which is usually found at /usr/bin/time (if it isn't, try whereis time to locate it).

Change time in your command-line to /usr/bin/time (or /usr/bin/time -p) or whatever the path to the time program is, and it should work.


Why it didn't work:

The C shell (like some other shells) has a built-in time command (see the builtin manual page), which is used in preference to the non-builtin (standalone) time program:

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

and the man page for csh (actually tcsh on my system) states:

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

The /usr/bin/time command doesn't have this limitation, and neither do the inbuilt time commands of most other shells, for example bash or zsh.

Arne Stenström
  • 1,790
  • 1
  • 18
  • 18
  • where can I download non-csh time program? I've googled and it seems hard to find one. – Stan Mar 12 '12 at 15:09
  • Sorry, I thought /usr/bin/time is the built-in one and was trying to find another one. Thanks! – Stan Mar 12 '12 at 15:46
0

Did you mean to use a pipe there? What you're essentially doing is piping the result of the second time command into tee. That's why your result is not being printed out - it's actually probably being written into make.log.

deed02392
  • 2,982
  • 6
  • 26
  • 36