2014-12-07 82 views
-1

我目前正在提供帶有shell腳本的Vagrant框,我想讓人們知道它們在提供完成之前還剩多少時間。但是在運行腳本時,剩下的時間與傳遞的時間不符。我在下面的代碼輸出中表示了不同之處。什麼是問題?謝謝!Bash時間錯誤

我的腳本運行如下

  1. 從Unix紀元獲取當前時間和設定剩餘時間start=$(date +%s) ; remaining=1200
  2. 打印剩餘echo start=$(date +%s)
  3. 回聲當前步驟的時間和運行步驟的腳本echo "Moving .ssh" ; ./move_ssh.sh
  4. 重新計算剩餘時間減去新時間並添加開始時間

    a。這與獲得從曆元開始時間和當前時間之間的差異並從前一剩餘時間中減去它是相同的。 (一 - (二 - C)= A - B + C)

    remaining=`expr $remaining - $(date +%s) + $start` 
    

提供腳本

start=$(date +%s) ; remaining=1200 
echo "Time Remaing: $remaining ($(date "+%T"))" 
echo "Moving .ssh" ; ./move_ssh.sh 
... 
remaining=`expr $remaining - $(date +%s) + $start` ; echo "Time Remaing: $remaining ($(date "+%T"))" 
... 

流浪輸出

==> default: Time Remaing: 1200 (00:43:58) 
==> default: Moving .ssh 
==> default: Time Remaing: 1200 (00:43:58) 
==> default: Installing git 
==> default: Time Remaing: 1190 (00:44:08) 
==> default: Installing mongodb 
==> default: Time Remaing: 1140 (00:44:48) (1190 to 1140 is 50 but 44:08 to 44:48 is 40) 
==> default: Installing redis-server 
==> default: Time Remaing: 1082 (00:44:56) (1140 to 1082 is 68 but 44:48 to 44:56 is 8) 
==> default: Installing python-pip 
==> default: Time Remaing: 1001 (00:45:19) (1082 to 1001 is 81 but 44:56 to 45:19 is 23) 
==> default: Installing python-dev 
==> default: Time Remaing: 887 (00:45:52) (1001 to 887 is 114 but 45:19 to 45:52 is 33) 
==> default: Installing mysql-server-5.5 
==> default: Time Remaing: 713 (00:46:52) (887 to 713 is 174 but 45:52 to 46:52 is 60) 
+0

關閉調試我只有一個簡單的問題 - 其中'1200'是從哪裏來的? – pawel7318 2014-12-08 01:23:57

+0

1200 20分鐘。完成安裝的大致時間 – merlinpatt 2015-01-20 18:11:14

回答

1

以下具有預期的行爲我創建另一個變量$_remaining

start=$(date +%s) ; remaining=1200 
_remaining=$(expr $remaining - $(date +%s) + $start) ; echo "Time Remaing: $_remaining ($(date "+%T"))" 

調試與set -x原來的顯示問題:

[email protected]:~/documents/scraping/txt$ set -x 
[email protected]:~/documents/scraping/txt$ start=$(date +%s) ; remaining=1200 
++ date +%s 
+ start=1417917612 
+ remaining=1200 
[email protected]:~/documents/scraping/txt$ remaining=$(expr $remaining - $(date +%s) + $start) ; echo "Time Remaing: $remaining ($(date "+%T"))" 
+++ date +%s 
++ expr 1200 - 1417917626 + 1417917612 
+ remaining=1186 
++ date +%T 
+ echo 'Time Remaing: 1186 (21:00:26)' 
Time Remaing: 1186 (21:00:26) 
[email protected]:~/documents/scraping/txt$ remaining=$(expr $remaining - $(date +%s) + $start) ; echo "Time Remaing: $remaining ($(date "+%T"))" 
+++ date +%s 
++ expr 1186 - 1417917634 + 1417917612 
+ remaining=1164 
++ date +%T 
+ echo 'Time Remaing: 1164 (21:00:34)' 
Time Remaing: 1164 (21:00:34) 
[email protected]:~/documents/scraping/txt$ remaining=$(expr $remaining - $(date +%s) + $start) ; echo "Time Remaing: $remaining ($(date "+%T"))" 
+++ date +%s 
++ expr 1164 - 1417917652 + 1417917612 
+ remaining=1124 
++ date +%T 
+ echo 'Time Remaing: 1124 (21:00:52)' 
Time Remaing: 1124 (21:00:52) 
[email protected]:~/documents/scraping/txt$ remaining=$(expr $remaining - $(date +%s) + $start) ; echo "Time Remaing: $remaining ($(date "+%T"))" 
+++ date +%s 
++ expr 1124 - 1417917656 + 1417917612 
+ remaining=1080 
++ date +%T 
+ echo 'Time Remaing: 1080 (21:00:57)' 
Time Remaing: 1080 (21:00:57) 

您可以通過set +x