【轉】 time--shell保留字輸出無法重定向解決

 

話說time是一個bash的保留字。別人這樣講,但是我沒有看出來是爲什麼這樣講,經查time命令是time包中的一個文件。我不知道這樣講(保留字)的目的,但是運行測試,這個命令(time)的確有點特殊。

正常運行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)。
經測試上面兩種方式都有效。

附:
關於管道的資料可以參考bash的man手冊中pipeline一節。
關於time的更多資料參考time的man手冊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章