• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > shell(bash)下“time” 命令的输出详解

shell(bash)下“time” 命令的输出详解

作者:daisy 字体:[增加 减小] 来源:互联网

daisy 通过本文主要向大家介绍了shell(bash)下“time” 命令的输出详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

相信大家都知道bash下time是一个很有用的命令,它可以为一段脚本或一个程序的执行计时,这通常在粗略比较程序执行效率的时候很方便。但是你会发现,time命令输出的时间文字不能被简单地重定向,例如重定向至一个文本文件,只能显示在屏幕上,这对于非交互计时很不方便。

例如:

$ time find . -name "mysql.sh" >1.txt

real 0m0.081s
user 0m0.060s
sys  0m0.020s

$ time find . -name "mysql.sh" 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh

real 0m0.068s
user 0m0.040s
sys  0m0.030s
</div>

通过上面的尝试,发现无法将time的输出信息重定向到文件里面,为什么?因为time是shell的关键字,shell做了特殊处理,它会把time命令后面的命令行作为一个整体来进行处理,在重定向时,实际上是针对后面的命令来的,time命令本身的输出并不会被重定向的。

关键字time设置了一个标记,知道command(find)命令执行完,timing信息才被打印到stderr中。time关键字要整个command和管道,还有相关的重定向都要来得高级。这就是为什么简单的重定向对于time而言不起作用。 这是Bash语法定义的。command之后的重定向对于time而言,是command的一部分。

注:time命令的输出到标准错误(stderr)中

当time命令执行时,command运行于当前shell(也就是time命令所执行的shell)的下一级shell,而time自身的输出位于当前shell的stderr。像上面所示的那样重定向只会使得command的stdout被重定向至一个文本文件,而不会输出time自身的输出内容。

第一种解决方法,就是将time命令和将要执行的命令行放到一个shell代码块中,也就是一对大括号中,要注意空格和分号的使用。

$ { time find . -name "mysql.sh"; } 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
$ cat 2.txt

real 0m0.068s
user 0m0.030s
sys  0m0.040s
</div>

第一种方式的尝试成功了,总结起来就是 { time command-line; } 2>file  注意分隔符的使用。

另外一种方式就是使用子Shell的方式

如下所示:

$ (time find . -name "mysql.sh") 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
$ cat 2.txt

real 0m0.083s
user 0m0.040s
sys  0m0.020s
[root@web186 root]#
</div>

第二种方式的尝试也成功了,总结起来就是 (time command-line) 2>file 这里time紧贴着小括号(也可以的,命令行结束也不必带分号。当然最好还是用第一种方式,毕竟启动一个子shell是要多占些资源的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

</div>

您可能想查找下面的文章:

相关文章

  • Shell脚本中获取本机ip地址的3个方法
  • linux仿写chmod命令
  • sed初学者实用说明
  • 一个shell for循环与case结合的脚本(监控程序状态)
  • 一个简单的linux命令 tail
  • Linux中多命令执行';'和'&&'的区别解释
  • 如何编写健壮的Bash脚本(经验分享)
  • Python创建、删除桌面、启动组快捷方式的例子分享
  • shell编程之实现windows回收站功能分享
  • Linux 中C语言getcwd()函数的用法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 监控php-fpm并自动重启服务的shell脚本
    • 一个监控LINUX目录和文件变化的Shell脚本分享
    • shell基础学习中的字符串操作、for循环语句示例
    • 简单的Linux查找后门思路和shell脚本分享
    • 神奇的shell命令行输入与输出功能介绍
    • linux压缩常用命令小结
    • Linux中多命令执行';'和'&&'的区别解释
    • linux shell查看当前外网IP
    • awk中查看包含某两列字符的用法
    • 杀掉oracle在线用户脚本分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有