![wget이 다운로드를 완료할 때까지 기다리지 않는 Bash 스크립트](https://rvso.com/image/1476421/wget%EC%9D%B4%20%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%EB%A5%BC%20%EC%99%84%EB%A3%8C%ED%95%A0%20%EB%95%8C%EA%B9%8C%EC%A7%80%20%EA%B8%B0%EB%8B%A4%EB%A6%AC%EC%A7%80%20%EC%95%8A%EB%8A%94%20Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
다양한 gzip 아카이브를 병합하기 위해 다음 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
내가 겪고 있는 문제는 "cat" 명령이 아무것도 포함하지 않은 "blocklist.p2p.gz"를 생성한다는 것입니다. 나는 Bash가 wget이 다운로드를 완료할 때까지 기다리지 않아서 문제가 발생했다고 생각합니다.
각 줄을 명령 프롬프트에 한 번에 하나씩 복사하여 붙여넣고 개인적으로 다운로드가 완료될 때까지 기다리면 Cat이 예상한 대로 병합된 아카이브를 생성하기 때문에 이것을 믿습니다. 스크립트에서 위의 6개 줄을 모두 복사한 다음 전체 내용을 동일한 명령 프롬프트에 붙여넣으면 스크립트에서 발생하는 것과 동일한 문제가 발생합니다.
그렇다면 Wget이 완료될 때까지 Bash를 기다리게 하는 방법이 있습니까? 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
&
Bash는 URL의 기호를 명령의 종결자로 보고 이를 백그라운드 프로세스로 실행합니다. Bash에 명령을 입력하고 명령을 추가하면 &
백그라운드에서 해당 명령이 실행되고 호출 스크립트나 터미널에 즉시 제어권이 반환됩니다. 이들 사이의 필드는 명령 자체로 실행됩니다.
Bash가 URL을 이런 식으로 해석하지 못하도록 하려면 전체 내용을 따옴표로 묶으십시오. 이렇게 하면 전체 URL을 문자열 매개변수로 전달하고 포그라운드 프로세스로 실행됩니다.