在每个 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 保留为单个参数。下划线占用 sh 的 $0 位置,URL 则留在 $1 中。
每个子 shell 各自独立运行 shuf。随机选择可能多次选中同一个代理;它既不是轮询调度,也不保证得到不同的出口地址。
显式的空绕过列表可以避免继承来的 no_proxy 设置绕过所选中间人。示例会丢弃响应正文;保存并发下载时请使用各自独立的输出路径。