我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

前言

相信大家都知道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/class="lazy" data-src/scripts/mysql.sh
./work186/sms/class="lazy" data-src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/class="lazy" data-src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/class="lazy" data-src/scripts/mysql.sh

real 0m0.068s
user 0m0.040s
sys  0m0.030s

通过上面的尝试,发现无法将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/class="lazy" data-src/scripts/mysql.sh
./work186/sms/class="lazy" data-src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/class="lazy" data-src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/class="lazy" data-src/scripts/mysql.sh
$ cat 2.txt

real 0m0.068s
user 0m0.030s
sys  0m0.040s

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

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

如下所示:


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

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

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

总结

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

shell下time”命令的输出详解

这篇文章主要讲解了“shell下time”命令的输出详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“shell下time”命令的输出详解”吧!前言相信大家都知道bash下time是一个很有
2023-06-09

Linux中top命令输出详解

前言linux下的top命令我相信大家都用过,自从我接触Linux以来就一直用top查看进程的CPU和MEM排行榜。但是top命令的其他输出结果我都没有了解,这些指标都代表什么呢,什么情况下需要关注呢?以及top命令输出结果的来源数据是什么
2022-06-04

详解Linux time 命令的使用

1.命令简介 time 用于统计命令执行所消耗的时间及相关系统资源等信息。time 可以显示的资源有四大项,分别是:Time resources Memory resources IO resources Command info2.命令格
2022-06-03

shell脚本中如何获取命令的输出

这篇“shell脚本中如何获取命令的输出”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“shell脚本中如何获取命令的输出”文
2023-06-29

详解 Shell中的grep命令

用‘grep'搜索文本文件 如果您要在几个文本文件中查找一字符串,可以使用‘grep'命令。‘grep'在文本中搜索指定的字符串。举个例子:假设您正在‘/usr/src/linux/Documentation'目录下搜索带字符串‘magic
2022-06-04

shell命令中定向输出的示例分析

这篇文章给大家分享的是有关shell命令中定向输出的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mycommand >mylog.txt 2>&1 应该是最经典的用法了。命令的结果可以通过“%>”的形式
2023-06-09

神奇的shell命令行输入与输出功能介绍

标准输入/输出和重定向,Linux发行版Fedora Core Linux,而Red Hat公司原来Red Hat Linux的开发团队也将继续参与这一发行版本的开发工作。 标准输入与输出 我们知道,执行一个shell命令行时通常会自动
2022-06-04

linux top命令详解与输出结果说明

top命令是linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。 top命令说明[www.jb51.net@jb51 ~]$ top top - 16:07:37 up 241 days, 20:
2022-06-04

用shell命令读取与输出数据的代码

shell脚本读取数据有以下几种方式:1.键盘输入,默认2.从文件中读取3.通过管道命令传递 echo的功能:c :不换行f :进纸t :跳格n :换行表示转义,例如:""/dev/rmt0""翻译为,"/dev/rmt0" read:从键
2022-06-04

Android shell命令行中过滤adb logcat输出的方法

我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率。本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法。
2022-06-06

shell 脚本中获取命令的输出的实现示例

这个主要介绍的方法是获取命令的输出内容,而不是命令执行成功与否的返回值。 通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作。 比较常用的一种方式就是, 匹配命令输出的内容中是否存在某些关键字,选择执
2022-06-05

详解Shell命令的执行顺序

详解Shell命令的执行顺序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Shell 从标准输入或脚本中读取的每一行称为管道(pipeline);它包含了一个或
2023-06-09

如何使任何 shell 命令的输出(stdout、stderr)不缓冲?

问题内容有没有办法在没有输出缓冲的情况下运行 shell 命令?例如,hexdump 文件 | ./my_script 只会以缓冲块的形式将输入从 hexdump 传递到 my_script,而不是逐行传递。使任何命令的输出不缓冲的通
如何使任何 shell 命令的输出(stdout、stderr)不缓冲?
2024-02-06

Linux下route命令输出信息的示例分析

这篇文章主要为大家展示了“Linux下route命令输出信息的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下route命令输出信息的示例分析”这篇文章吧。使用不带任何参数的r
2023-06-17

编程热搜

目录