Выбирайте прокси внутри каждой задачи xargs
Запускайте случайный выбор в дочерней оболочке, чтобы каждая параллельная задача curl получала прокси из списка.
Поместите случайный выбор внутрь оболочки, запускаемой для каждой задачи. Если раскрыть подстановку команды во внешней оболочке, значение будет выбрано ещё до того, как 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.
Каждая дочерняя оболочка запускает shuf независимо. Случайный выбор может взять один и тот же прокси более одного раза; это не круговое планирование и не гарантия разных адресов выхода.
Явно пустой список обхода не позволяет унаследованной настройке no_proxy обойти выбранного посредника. Пример отбрасывает тела ответов; при сохранении параллельных загрузок используйте отдельные пути вывода.