作者:good bai
正常运行time命令:
[root@dy dic]# time sleep 5
real 0m5.001s
user 0m0.001s
sys 0m0.000s
我们重定向命令输出:
[root@dy dic]# time sleep 5 >out.txt
real 0m5.001s
user 0m0.002s
sys 0m0.001s
屏幕仍然输出,且out.txt文件为空,重定向失败。
使用time sleep 5 2>out.txt命令测试仍然无效。大概上面这个情况就是time成为bash保留字的理由,据说因为这个命令的一些特殊性,所以要求它要以一种特殊的形式运行。那么我们该如何解决类似此种的号称为保留字的命令输出不可重定向的问题呢?
那天刚好看到了 一篇博文 如此介绍。因为time作为保留字的原因导致它按常规方式输出不可被重定向,我们可以通过让它运行在子shell(subshell)形态下,这样我们就可以正常的重定向它的输出了。
在console下,两种让命令运行在子shell的方式是给命令加小括号和加大括号。按这样最终实现如下:
1 ( time sleep 5 ;) 2> out.txt
2 { time sleep 5;} 2>out.txt
注:time命令正常的输出是stderr(所以要在重定向是加2)。
经测试上面两种方式都有效。