主頁(yè) > 知識(shí)庫(kù) > shell(bash)下“time” 命令的輸出詳解

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

熱門(mén)標(biāo)簽:德陽(yáng)400電話申請(qǐng) 鶴崗400電話申請(qǐng) 智能電銷(xiāo)機(jī)器人有用嗎 外呼電話系統(tǒng)怎么操作 怎么在百度地圖標(biāo)注公司的位置 商機(jī)地圖標(biāo)注 天津電話外呼系統(tǒng)排名 百度地圖標(biāo)注直線距離 測(cè)繪地圖標(biāo)注名稱(chēng)

前言

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

例如:

$ 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

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

關(guān)鍵字time設(shè)置了一個(gè)標(biāo)記,知道command(find)命令執(zhí)行完,timing信息才被打印到stderr中。time關(guān)鍵字要整個(gè)command和管道,還有相關(guān)的重定向都要來(lái)得高級(jí)。這就是為什么簡(jiǎn)單的重定向?qū)τ趖ime而言不起作用。 這是Bash語(yǔ)法定義的。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)的下一級(jí)shell,而time自身的輸出位于當(dāng)前shell的stderr。像上面所示的那樣重定向只會(huì)使得command的stdout被重定向至一個(gè)文本文件,而不會(huì)輸出time自身的輸出內(nèi)容。

第一種解決方法,就是將time命令和將要執(zhí)行的命令行放到一個(gè)shell代碼塊中,也就是一對(duì)大括號(hào)中,要注意空格和分號(hào)的使用。

$ { 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

第一種方式的嘗試成功了,總結(jié)起來(lái)就是 { 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]#

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

總結(jié)

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

您可能感興趣的文章:
  • bash shell命令行選項(xiàng)與修傳入?yún)?shù)處理
  • Bash Shell中的select命令簡(jiǎn)單使用示例
  • 列出所有Bash Shell內(nèi)置命令的方法示例

標(biāo)簽:鎮(zhèn)江 武漢 自貢 丹東 優(yōu)質(zhì)小號(hào) 百色 六盤(pán)水 滁州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《shell(bash)下“time” 命令的輸出詳解》,本文關(guān)鍵詞  shell,bash,下,time,命令,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《shell(bash)下“time” 命令的輸出詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于shell(bash)下“time” 命令的輸出詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章