我尝试使用带选项time
的命令-f
来格式化时间输出,但出现以下错误:
-f: command not found
然后我尝试使用其他选项-a
,-o
等等,但还是出现同样的错误。甚至time --version
不起作用(--version: command not found
)。
不要告诉我去读手册,因为我已经读过很多次了……所有这些选项都在那里指定。那么,问题可能出在哪里?
答案1
好吧,即使你不喜欢它,我也会带你再仔细读一遍man time
。在本节的最后EXAMPLES
你会发现:
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
因此,我假设您使用 bash shell,它使用 的内部版本time
,作为 shell 关键字提供。您可以使用以下命令进行检查:
type time
输出可能是:
time is a shell keyword
如果是这样的话,那么很明显,使用真实的 time
命令必须使用其明确路径:/usr/bin/time
。
此外,如果您不想再使用 shell 关键字time
,您可以创建永久别名如下:
alias time='/usr/bin/time'
这将覆盖 shell 关键字,time
因为命令:
type time
将给出以下输出:
time is aliased to `/usr/bin/time'
答案2
因为,正如其他答案所解释的,time
是一个 shell 关键字,所以您唯一可用的选项是-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
因此,您需要运行。以下是执行time
此操作的/usr/bin
几种方法:
改用
time
可执行文件:/usr/bin/time -f %Uuser ls >/dev/null
使用
\
which 会使你的 shell 忽略别名和关键字,而是搜索$PATH
匹配的可执行文件:\time -f %Uuser ls >/dev/null
使用
command
具有类似效果的内置函数:command time -f %Uuser ls >/dev/null
使用不同的 shell,即没有此关键字的 shell。例如
sh
(实际上dash
在 Ubuntu 上):sh -c "time -f %Uuser ls >/dev/null"
使用
which
,它将搜索你的$PATH
(好吧,这个很傻):$(which time) -f %Uuser ls >/dev/null
答案3
bash
和shellzsh
有自己的内部time
命令。你必须使用
/usr/bin/time -f ...
顺便说一句,我发现使用(来自zsh
):
~% which time
time: shell reserved word