2011-03-01 1 views

cevap

78

Diğerlerinin önerdiği gibi, zaman komutunu kullanmak iyi bir fikirdir.

Diğer bir seçenek, komut dosyasının başlatılmasından bu yana geçen saniye sayısını içeren sihirli yerleşik değişkeni $ SECONDS kullanmaktır. Sen söyleyebiliriz:

START_TIME=$SECONDS 
dosomething 
ELAPSED_TIME=$(($SECONDS - $START_TIME)) 

Bu bash özgü olduğunu düşünüyorum, ama eğer Linux üzerinde olduğuna göre, sana Bash kullandığınız varsayılmaktadır. Örneğin aşağıdaki

33

time komutunu kullanın. time ls /bin.

+0

'Zamanı '** ** uygun değildir ** –

+4

@ shiplu.mokadd.im No Ne hakkında: 'time (ls /; sleep 2; ls/bin)'. – Keith

+0

Eğer '\' ve '()' yi kullanırsanız daha karmaşık hale geldi. –

25

Dene: Sadece benim gibi kimseye yardım etmek

START_TIME=$SECONDS 
# do something 
sleep 65 

ELAPSED_TIME=$(($SECONDS - $START_TIME)) 

echo "$(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec"  
#> 1 min 5 sec 
2

bir hata alırsınız:

arithmetic expression: expecting primary: "-" 

ile başlamak zorundadır senin shellscript kontrol edin:

#!/bin/bash 

Şerefe!

3

Burada milisaniye cinsinden geçen süreyi bulmak için komut dosyası verilmiştir. Uyku 60 çizgisini, yürütmek istediğiniz kodla değiştirin. Eğer ** karmaşık komut dizisi yürütme zaman

a=0 
while [ $a -lt 10 ] 
do 
START_TIME=`echo $(($(date +%s%N)/1000000))` 
sleep 3 
END_TIME=`echo $(($(date +%s%N)/1000000))` 
ELAPSED_TIME=$(($END_TIME - $START_TIME)) 
echo $ELAPSED_TIME 
if [ $a -eq 10 ] 
then 
    break 
fi 
a=`expr $a + 1` 
done 
+0

Milisaniye için makul bir çözüm. – Blaf