3

Я использую следующий скрипт 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 ждать по умолчанию, и что-то приводит к тому, что этого не происходит? Я был бы очень признателен за решение.

РЕДАКТИРОВАТЬ: Согласно комментариям ниже, правильный скрипт для использования:

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 ответ1

4

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .