Why doesn't the `time` command work with any option?
Solution 1:
Well, even if you don't like it, I will put you to read again with more attention man time
. At the end of EXAMPLES
section you will find:
Users of the bash shell need to use an explicit path in order to run
the external time command and not the shell builtin variant. On system
where time is installed in /usr/bin, the first example would become
/usr/bin/time wc /etc/hosts
So, I'm assuming that you use bash shell which uses an internal version of time
, provided as a shell keyword. You can check this using the following command:
type time
and the output will probably be:
time is a shell keyword
If this is the case, then is clear, to use the real time
command, you must to use its explicit path: /usr/bin/time
.
Further, if you don't want to use anymore the shell keyword time
, you can create a permanent alias as follow:
alias time='/usr/bin/time'
This will overwrite the shell keyword time
because the command:
type time
will give the following output now:
time is aliased to `/usr/bin/time'
Solution 2:
Since, as the other answers explain, time
is a shell keyword, the only option available to you is -p
:
terdon@oregano ~ $ help time
time: time [-p] pipeline
Report time consumed by pipeline's execution.
Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.
Options:
-p print the timing summary in the portable Posix format
So, you need to run the time
that's in /usr/bin
. Here are a few ways to do so:
-
Use the
time
executable instead:/usr/bin/time -f %Uuser ls >/dev/null
-
Use
\
which causes your shell to ignore aliases and keywords and instead search your$PATH
for a matching executable:\time -f %Uuser ls >/dev/null
-
Use the
command
builtin which has a similar effect:command time -f %Uuser ls >/dev/null
-
Use a different shell, one that has no such keyword. For example
sh
(which is actuallydash
on Ubuntu):sh -c "time -f %Uuser ls >/dev/null"
-
Use
which
, which will search through your$PATH
(OK, this one is silly):$(which time) -f %Uuser ls >/dev/null
Solution 3:
The bash
and zsh
shells have their internal time
command. You have to use
/usr/bin/time -f ...
BTW, I discovered that using (from zsh
):
~% which time
time: shell reserved word