我試圖重定向時間命令的輸出,但我不能。如何重定向「時間」命令的輸出?
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在該文件中,我可以看到ls
命令的輸出,不就是time
。 請解釋,爲什麼我不能以及如何做到這一點。
我試圖重定向時間命令的輸出,但我不能。如何重定向「時間」命令的輸出?
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在該文件中,我可以看到ls
命令的輸出,不就是time
。 請解釋,爲什麼我不能以及如何做到這一點。
時間是shell內建的,我不確定是否有方法重定向它。但是,您可以使用 /usr/bin/time
,它可以接受任何輸出重定向。
/usr/bin/time --output filename ls – chub 2010-03-09 12:39:50
內置時間與輸出重定向一起工作良好。它只在STDERR上輸出,而不在STDOUT上輸出。 – Mnementh 2010-03-09 13:09:40
問題是內置命令是在shell環境本身內執行的,而不是一個子外殼。由於您的shell的stderr通常連接到終端,重定向不會執行任何操作。爲了重定向內置時間,我相信你必須做一些像'bash time mycmd 2> file'一樣的東西。或者像上面提到的那樣調用'/ usr/bin/time'。 – ktbiz 2017-08-17 02:36:20
命令時間將其輸出發送到STDERR(而不是STDOUT)。這是因爲正常執行的命令(在本例中爲ls)會輸出到STDOUT。
如果你想捕捉的時間輸出,然後鍵入:
(time ls) 2> filename
捕捉只是時間的輸出,但LS的輸出變爲正常的控制檯。如果你想同時捕獲在一個文件中,鍵入:
(time ls) &> filename
2>重定向STDERR,&>重定向兩者。
這個答案實際上回答了*爲什麼* OP的重定向不起作用,這是OP要求的問題之一。沒有其他人解決這個問題。 – Joshua 2016-06-01 14:27:40
如果你不想輸出time
和命令混合。 隨着GNU的時候,你可以使用-o file
,如:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
而tim
是時間輸出,out
和err
從grep
輸出和錯誤。
重定向似乎不適用於time
的原因是它在流水線前使用時是bash保留字(不是內建的!)。的bash(1):
如果時間保留字之前的管線,通過其執行中所消耗的經過以及 用戶和系統時間被報告的 管道終止時。
所以,重定向的time
輸出,要麼使用大括號:
{ time ls; } 2> filename
或致電/usr/bin/time
:
/usr/bin/time ls 2> filename
應該對超級用戶,我想。 – Mnementh 2010-03-09 13:06:05
我不這麼認爲! – abubacker 2010-03-09 13:11:00
這個問題的答案不僅對程序員感興趣,而且對其他高級用戶也很感興趣:http://superuser.com/ – Mnementh 2010-03-09 13:14:05