2014-12-07 1 views
-1

В настоящее время я предоставляю боксерские ящики со сценариями оболочки, и я хотел бы дать людям понять, сколько времени у них осталось до завершения предоставления. Но при запуске скрипта оставшееся время не совпадает с тем, сколько времени прошло. Я обозначил различия в выходе кода ниже. В чем проблема? Благодаря!Bash Time Wrong

Мой сценарий работает следующим образом

  1. Получить текущее время от эпохи Unix и установить время, оставшееся start=$(date +%s) ; remaining=1200
  2. печати время, оставшееся echo start=$(date +%s)
  3. ECHO текущий шаг и запустить скрипты СТЭП echo "Moving .ssh" ; ./move_ssh.sh
  4. Рассчитать оставшееся время путем вычитания нового времени и добавления времени начала

    a. Это то же самое, что получить разницу между временем начала и текущим временем с эпохи и вычесть его из предыдущего оставшегося времени. (А - (Ь - с) = 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

+0

1200 на 20 минут. Примерное время для завершения установки – merlinpatt

ответ

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