各 xargs ジョブの内部でプロキシを選ぶ
子シェルの中でランダム選択を実行し、並列の curl ジョブがそれぞれリストからプロキシを取得できるようにします。
ランダム選択は、ジョブごとに起動されるシェルの内側に置きます。外側のシェルでコマンド置換を展開すると、xargs が処理を始める前に値が確定してしまいます。
1 行に 1 つのプロキシ URL を書いた検証済みの proxies.txt があれば、公開候補は無料プロキシリストから取得できます。各エントリは 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 は各コマンドに 1 つの URL を渡し、-P 4 は同時に最大 4 つのコマンドを許可します。null 区切りの入力は URL を 1 つの引数として保ちます。アンダースコアは sh の $0 の位置を占め、URL は $1 に残ります。
子シェルはそれぞれ独立に shuf を実行します。ランダム選択は同じプロキシを複数回選ぶことがあり、ラウンドロビン方式でも、異なる出口アドレスになる保証でもありません。
明示的に空のバイパスリストにより、継承された no_proxy 設定が選択した中継サーバーを迂回するのを防ぎます。この例はレスポンス本体を破棄します。同時ダウンロードを保存するときは出力先を分けてください。