Kies de proxy binnen elke xargs-taak
Voer de willekeurige keuze uit in de kind-shell zodat elke parallelle curl-taak een proxy uit de lijst krijgt.
Plaats de willekeurige keuze in de shell die voor elke taak wordt gestart. Als je een opdrachtvervanging in de buitenste shell uitbreidt, wordt de waarde gekozen voordat xargs begint te werken.
Met een gevalideerd proxies.txt met één proxy-URL per regel kunnen openbare kandidaten uit de gratis proxylijst komen; formatteer elke regel met een protocol dat curl ondersteunt:
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 geeft elke opdracht één URL, en -P 4 staat maximaal vier opdrachten tegelijk toe. De met nullen gescheiden invoer bewaart de URL als één argument. De underscore neemt de $0-positie van sh in en laat de URL in $1.
Elke kind-shell voert shuf onafhankelijk uit. De willekeurige keuze kan dezelfde proxy meerdere keren kiezen; het is geen round-robin-planning en geen garantie op verschillende uitgangsadressen.
De expliciet lege bypass-lijst voorkomt dat een geërfde no_proxy-instelling de gekozen tussenpartij omzeilt. Het voorbeeld gooit antwoordlichamen weg; gebruik aparte uitvoerpaden bij het opslaan van gelijktijdige downloads.