Скрипт Bash не ждет, пока wget завершит загрузку

Скрипт Bash не ждет, пока wget завершит загрузку

Я использую следующий bash-скрипт для объединения различных gzip-архивов:

wget -O bluelvl1.gz http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz
wget -O bluelvl2.gz http://list.iblocklist.com/?list=gyisgnzbhppbvsphucsw&fileformat=p2p&archiveformat=gz
wget -O badpeer.gz http://list.iblocklist.com/?list=cwworuawihqvocglcoss&fileformat=p2p&archiveformat=gz
wget -O microsoft.gz http://list.iblocklist.com/?list=xshktygkujudfnjfioro&fileformat=p2p&archiveformat=gz
wget -O unallocated.gz http://list.iblocklist.com/?list=gihxqmhyunbxhbmgqrla&fileformat=p2p&archiveformat=gz
cat bluelvl1.gz bluelvl2.gz badpeer.gz microsoft.gz unallocated.gz > blocklist.p2p.gz

Проблема, с которой я столкнулся, заключается в том, что команда "cat" создает "blocklist.p2p.gz" без ничего внутри. Я считаю, что проблема вызвана тем, что Bash не ждет, пока wget завершит загрузку.

Я верю в это, потому что если я копирую-вставляю каждую строку в командную строку по одной (и лично жду окончания загрузки), Cat создает объединенный архив, как я и ожидал. Если я копирую все шесть строк выше из скрипта, а затем вставляю все это в ту же командную строку, я вижу ту же проблему, что и скрипт.

Так есть ли способ заставить Bash ждать завершения wget? Bash должен ждать по умолчанию и что-то заставляет это не происходить? Я был бы очень признателен за решение.

EDIT: Согласно комментариям ниже, правильный сценарий для использования:

wget -O bluelvl1.gz "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz"
wget -O bluelvl2.gz "http://list.iblocklist.com/?list=gyisgnzbhppbvsphucsw&fileformat=p2p&archiveformat=gz"
wget -O badpeer.gz "http://list.iblocklist.com/?list=cwworuawihqvocglcoss&fileformat=p2p&archiveformat=gz"
wget -O microsoft.gz "http://list.iblocklist.com/?list=xshktygkujudfnjfioro&fileformat=p2p&archiveformat=gz"
wget -O unallocated.gz "http://list.iblocklist.com/?list=gihxqmhyunbxhbmgqrla&fileformat=p2p&archiveformat=gz"
cat bluelvl1.gz bluelvl2.gz badpeer.gz microsoft.gz unallocated.gz > blocklist.p2p.gz

решение1

Bash видит &символы в URL как терминатор команды и выполняет ее как фоновый процесс. Если вы введете любую команду в bash и добавите &к ней a, он выполнит ее в фоновом режиме и немедленно вернет управление вызывающему скрипту или терминалу. Поля между ними выполняются как сами команды.

Чтобы запретить bash интерпретировать URL таким образом, заключите все в кавычки. Это заставит его передать весь URL как строковый параметр, и он будет запущен как процесс переднего плана.

Связанный контент