2017-05-19 1 views
0

저는 다운로드 관리자 인 bash 스크립트를 작성하고 있습니다.특정 다운로드를 제어 할 수있는 포크 wget이 있습니다

for link in ${links}; do 
    wget -q --show-progress ${link} 
done 
  1. 어떻게 포크 모든 다운로드 및 스크립트 사용자의 모든 후을 하나 개의 특정 다운로드를 죽일 수있는 쉬운 방법을 제공하기 시작했습니다 관심의 포인트는이 간단한 라인이 고급 만들인가?

  2. wget -bqc가 병렬로 실행 되나요?

  3. 에 스크립트 사용자를위한 기능을 제공하는 것을 대신 --show 진행를 사용할 수 있나요 특정 다운로드의 현재 상태를 보여입니까?

답변

0

그래서 아이디어는 다음과 같습니다

#declare associative array [download_url]=pid_of_download  
declare -A downloads 
#declare array of killed downloads 
declare -a killedDownloads=() 

function download() { 
    local url=$1  
    # killed downloads can be reloaded, but not successfully downloaded URL's 
    if [ ${downloads[${url}]} ] && [[ ! ${killedDownloads[*]} =~ ${do wnloads[${url}]} ]]; then 
    echo "Already download-[ing/ed] !" 
    else 
    wget -q ${url} & 
    downloads[${url}]=$! 
    fi 
} 

$!은 실행 wget을 명령의 프로세스 분명히 가장 최근에 실행 된 배경 명령의 ID, PID를 포함

사용자가 몇 가지 다운로드를 죽이고 싶어

, 우리 모두 다운로드 배열을 인쇄 할 수 있습니다. 인쇄하는 동안, 우리는 또한

jobs -l | grep ${downloads[$i]) 

에서 문자열로 얻은 상태를 표시 ... 그리고 URL이 실제로하지 살해 완성 된 알 killedDownloads를 사용할 수 있습니다.

if [[ ${killedDownloads[*]} =~ ${downloads[$i]} ]] 
//set status var to killed 

킬 자체 :

function stop(){ 
    local pid=$1 

    if ps -p ${pid} > /dev/null; then 
     kill -9 ${pid} 
     wait ${pid} 2>/dev/null 
     echo "Killed downloading of ${pid}" 
     killedDownloads+=${pid} 
    else 
     echo "No active download with id = ${pid} exists" 
    fi 
    } 

물론 당신은 등, 약간의 대화 형 루프 내에서이를 넣어 유효하지 않은 URL에 대한 검사를 추가해야합니다

관련 문제