Bash дождитесь окончания работы и выполните следующую команду - PullRequest
0 голосов
/ 21 марта 2019

У меня проблема с моим bash-скриптом:

cmd1='/usr/bin/wget http://mysite/folder/'
$cmd1 > "/var/www/html/log/data.log" 2>&1 & 

cmd2='/usr/bin/indexer --rotate --all' 
$cmd2 > "/var/www/html/log/$(date +%Y-%m-%d_%H:%M)" 2>&1 & 

Получение данных с помощью wget занимает много времени, но следующая команда выполняется до того, как wget завершит работу.

Как проверитьесли wget был закончен и выполните следующую команду.Спасибо!

PS: я пытался использовать sleep между этими командами, а вторая команда выполняется несколько раз.Мне нужно только один раз.

1 Ответ

2 голосов
/ 21 марта 2019

Избавиться от трейлинга & с. & заставляет команды работать в фоновом режиме. Поведение по умолчанию, при котором они запускаются на переднем плане, соответствует желаемому.

cmd1='/usr/bin/wget http://mysite/folder/'
$cmd1 > "/var/www/html/log/data.log" 2>&1

cmd2='/usr/bin/indexer --rotate --all' 
$cmd2 > "/var/www/html/log/$(date +%Y-%m-%d_%H:%M)" 2>&1

Примечание: вы не должны хранить команды в переменных. Используйте функции. Также нет причин выписывать /usr/bin.

cmd1() { wget http://mysite/folder/; }
cmd1 > /var/www/html/log/data.log 2>&1

cmd2() { indexer --rotate --all; }
cmd2 > /var/www/html/log/"$(date +%Y-%m-%d_%H:%M)" 2>&1

Теперь вы можете хранить всю команду, перенаправления и все в функциях; Вы, возможно, заметили, что не можете сделать это при использовании переменных.

cmd1() { wget http://mysite/folder/ > /var/www/html/log/data.log 2>&1; }
cmd2() { indexer --rotate --all > /var/www/html/log/"$(date +%Y-%m-%d_%H:%M)" 2>&1; }

cmd1
cmd2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...