Выбірайце проксі ўнутры кожнага задання xargs
Выконвайце выпадковы выбар у дачэрнім shell, каб кожнае паралельнае заданне curl атрымлівала проксі са спіса.
Змясціце выпадковы выбар унутры shell, які запускаецца для кожнага задання. Раскрыццё падстаноўкі каманды ў знешнім shell выбірае значэнне да таго, як xargs пачне працу.
З правераным proxies.txt, дзе ў кожным радку адзін URL проксі, публічныя кандыдаты могуць брацца са спіса бясплатных проксі; фарматуйце кожны запіс пратаколам, які падтрымлівае curl:
printf '%s\0' 'https://a.example/one' 'https://b.example/two' |
xargs -0 -n 1 -P 4 sh -c '
proxy=$(shuf -n 1 proxies.txt) || exit 1
[ -n "$proxy" ] || exit 1
curl --fail --silent --show-error --max-time 30 \
--proxy "$proxy" --noproxy "" --output /dev/null "$1"
' _
-n 1 дае адно URL кожнай камандзе, а -P 4 дазваляе да чатырох каманд адначасова. Увод, падзелены нулямі, захоўвае URL як адзін аргумент. Падкрэсліванне займае пазіцыю $0 у sh, пакідаючы URL у $1.
Кожны дачэрні shell запускае shuf незалежна. Выпадковы выбар можа ўзяць той самы проксі больш за адзін раз; гэта не кругавое планаванне і не гарантыя розных адрасоў выхаду.
Яўны пусты спіс абыходу не дазваляе ўспадкаванай наладзе no_proxy абыйсці абраны пасярэднік. Прыклад адкідае целы адказаў; выкарыстоўвайце асобныя шляхі вываду пры захаванні паралельных загрузак.