2014-12-07 89 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