Итак, у меня есть цикл while:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Но это может занять много времени. Как бы я использовал GNU Parallel для этого цикла while?
shell-script
files
gnu-parallel
Пролетариат
источник
источник
tee
сparallel
кладя выход вsortedstuff
? Таким образом, я могу видеть результат, как он идет.>
с ,| tee
например , первая команда становитсяparallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
Будучи старой школой, «делай одно и делай это хорошо», парень из Unix, я бы поместил материал для подстановки строк в скрипт-обертку:
Если вы вызываете его
wrapper.sh
,parallel
команда для вызова будет:Обратите внимание, что вам не нужны
cat
такие вещи, которые сохраняют внешний вызов программы.источник
Вам не нужно
parallel
, так как тело цикла не зависит от предыдущих итераций. Просто запустите новый фоновый процесс для каждого хоста.parallel
облегчает управление некоторыми аспектами; Вы можете легче ограничить количество параллельных заданий.источник
wc -l live_hosts
это число превышает количество дисковых шпинделей или ядер ЦП - в зависимости от того, связана ли задача с вводом-выводом или с ЦП, - вы воспользуетесь преимуществом параллелизма с помощью такого решения. Возможностьparallel
ограничить количество заданий не просто приятна, она практически необходима, если ваша цель - скорость обработки.