Использование GNU xargs для запуска 64 процессов одновременно может выглядеть следующим образом:
#!/usr/bin/env bash
lookupArgs() {
for arg; do
# echo entire line together to ensure atomicity
echo "$arg resolves to $(dig -x "$arg" +short)"
done
}
export -f lookupArgs
network="a.b"
for (( x=1; x<=254; x++ )); do
for (( y=1; y<=254; y++ )); do
printf '%s.%s.%s\0' "$network" "$x" "$y"
done
done | xargs -0 -P64 bash -c 'lookupArgs "$@"' _ >hosts_a_b.txt
Обратите внимание, что это не гарантирует порядок вывода (и полагается на функцию lookupArgs
, выполняющую один write()
syscall на результат) - но вывод сортируется, поэтому вы можете изменить порядок.В противном случае можно получить упорядоченный вывод (и обеспечить атомарность результатов), переключившись на параллельную GNU - большой скрипт на perl против небольшой, простой и относительно малочисленной реализации GNU xargs.