国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Linux Shell > 正文

shell(bash)下“time” 命令的輸出詳解

2020-07-27 18:59:47
字體:
供稿:網(wǎng)友

前言

相信大家都知道bash下time是一個(gè)很有用的命令,它可以為一段腳本或一個(gè)程序的執(zhí)行計(jì)時(shí),這通常在粗略比較程序執(zhí)行效率的時(shí)候很方便。但是你會發(fā)現(xiàn),time命令輸出的時(shí)間文字不能被簡單地重定向,例如重定向至一個(gè)文本文件,只能顯示在屏幕上,這對于非交互計(jì)時(shí)很不方便。

例如:

$ time find . -name "mysql.sh" >1.txtreal 0m0.081suser 0m0.060ssys  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.shreal 0m0.068suser 0m0.040ssys  0m0.030s

通過上面的嘗試,發(fā)現(xiàn)無法將time的輸出信息重定向到文件里面,為什么?因?yàn)閠ime是shell的關(guān)鍵字,shell做了特殊處理,它會把time命令后面的命令行作為一個(gè)整體來進(jìn)行處理,在重定向時(shí),實(shí)際上是針對后面的命令來的,time命令本身的輸出并不會被重定向的。

關(guān)鍵字time設(shè)置了一個(gè)標(biāo)記,知道command(find)命令執(zhí)行完,timing信息才被打印到stderr中。time關(guān)鍵字要整個(gè)command和管道,還有相關(guān)的重定向都要來得高級。這就是為什么簡單的重定向?qū)τ趖ime而言不起作用。 這是Bash語法定義的。command之后的重定向?qū)τ趖ime而言,是command的一部分。

注:time命令的輸出到標(biāo)準(zhǔn)錯(cuò)誤(stderr)中

當(dāng)time命令執(zhí)行時(shí),command運(yùn)行于當(dāng)前shell(也就是time命令所執(zhí)行的shell)的下一級shell,而time自身的輸出位于當(dāng)前shell的stderr。像上面所示的那樣重定向只會使得command的stdout被重定向至一個(gè)文本文件,而不會輸出time自身的輸出內(nèi)容。

第一種解決方法,就是將time命令和將要執(zhí)行的命令行放到一個(gè)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.txtreal 0m0.068suser 0m0.030ssys  0m0.040s

第一種方式的嘗試成功了,總結(jié)起來就是 { 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.txtreal 0m0.083suser 0m0.040ssys  0m0.020s[root@web186 root]#

第二種方式的嘗試也成功了,總結(jié)起來就是 (time command-line) 2>file 這里time緊貼著小括號(也可以的,命令行結(jié)束也不必帶分號。當(dāng)然最好還是用第一種方式,畢竟啟動一個(gè)子shell是要多占些資源的。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青海省| 宣恩县| 辽宁省| 玉门市| 密云县| 郑州市| 莎车县| 永春县| 庆阳市| 巴南区| 南华县| 广州市| 南和县| 蓬安县| 云南省| 称多县| 株洲县| 临邑县| 安福县| 双城市| 河北区| 南城县| 东乌珠穆沁旗| 建瓯市| 左权县| 昌江| 克什克腾旗| 新巴尔虎左旗| 安图县| 涡阳县| 英吉沙县| 天长市| 铜川市| 湾仔区| 疏附县| 子洲县| 莲花县| 威宁| 静乐县| 浦城县| 志丹县|