2011-09-28 20 views
0

如果我在shell中使用time,我得到這樣在bash腳本中使用時間:如何獲得「正常」輸出?

$ time sleep 1 

real 0m1.003s 
user 0m0.000s 
sys  0m0.000s 

輸出但是,如果我在bash腳本中使用相同的命令,輸出的是這個

0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2176maxresident)k 
0inputs+0outputs (0major+179minor)pagefaults 0swaps 

我已經找到this post ,但我想要的是在腳本中使用time,但仍然獲得與在shell中使用它相同的輸出。

回答

2

你試過-p標誌嗎?

$ echo "time -p sleep 1" > x1 

$ bash x1 
real 1.01 
user 0.00 
sys 0.00 
1

不同之處在於輸出時不會輸出到終端。

做好佈局所需的終端代碼不適用於文件流。

你想達到什麼目的?如果你打算有'截圖'看看script

+0

格式化/終端碼不是OP的問題......如果它是'時間睡眠1 |貓'也會顯示「其他」格式...查看帖子中的鏈接,它有正確的答案,但不是如何解決 – nhed

+0

終端代碼不是問題。這只是打印文本。 –

2
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2176maxresident)k 
0inputs+0outputs (0major+179minor)pagefaults 0swaps 

...是由GNU版本外部time command產生缺省輸出。

real 0m1.003s 
user 0m0.000s 
sys  0m0.000s 

...是由bash builtin time產生的默認輸出。內部版本timebash擴展名:POSIX-compliant shell不需要提供內部版本time

然而,POSIX does specify an external time utility,這可能需要-p選項生成另一個輸出格式:

real 1.01 
user 0.00 
sys 0.00 

...和bash內建還接受-p選項產生相同的輸出格式。


bash內建應該很好地工作在提供的腳本實際上正在運行一個shell腳本通過bash

$ cat time.sh 
#!/bin/bash 
time sleep 1 
$ ./time.sh 

real 0m1.001s 
user 0m0.000s 
sys  0m0.000s 
$ 

如此看來,你的腳本調用外部程序,而不是內建的bash

這種情況最可能的原因是:

  1. 腳本說#!/bin/sh而非#!/bin/bash;和你的機器上
  2. /bin/sh實際上不是bash,但沒有bash擴展一個更輕量級的兼容POSIX的shell(在某些Linux發行版中找到這些天)。

的解決方案是確保腳本特別通過使用#!/bin/bash如果它依賴於bash擴展調用bash

+0

至於原因:1.我的腳本確實說''#!/ bin/bash'' 2.我使用Ubuntu--是的,你說得對 - 帶有* dash * shell而不是* bash *。 – Egon

+0

你每天都會學到新的東西...... – w00t

相關問題