ランダム選択は、ジョブごとに起動されるシェルの内側に置きます。外側のシェルでコマンド置換を展開すると、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 設定が選択した中継サーバーを迂回するのを防ぎます。この例はレスポンス本体を破棄します。同時ダウンロードを保存するときは出力先を分けてください。

関連記事