为什么time ls | grep real
输出这个
real 0m0.002s
user 0m0.000s
sys 0m0.002s
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
real 0m0.002s
Run Code Online (Sandbox Code Playgroud)
如果我输入
echo -e 'real\t0m0.002s\nuser\t0m0.000s\nsys\t0m0.002s\n' | grep real
Run Code Online (Sandbox Code Playgroud)
我得到了我的期望,即
real 0m0.002s
Run Code Online (Sandbox Code Playgroud)
我发现这有效
(time ls) 2>&1 > /dev/null | grep real
Run Code Online (Sandbox Code Playgroud)
这个命令有什么作用?
time ls | grep real
不能按预期工作。time
是一个bash
保留字,其行为与/usr/bin/time
.
如果时间保留字位于管道之前,则在管道终止时报告其执行所消耗的用户和系统时间。
源bash(1):GNU Bourne-Again SHell - Linux 手册页
此外,time
输出到标准错误而不是标准输出。
使用以下命令:
(time ls) 2>&1 >/dev/null | grep real
Run Code Online (Sandbox Code Playgroud)
笔记:
在(
与)
组time
和ls
命令在一起(所以这些命令会首先评估)
2>&1 >/dev/null
首先将 stderr 重定向到 stdout(即管道),然后将 stdout 重定向到/dev/null
.
所以 stderr 进入管道而 stdout 无处可去。
归档时间: |
|
查看次数: |
824 次 |
最近记录: |