Вы ищете parset
. Он является частью env_parallel
, являющейся частью пакета GNU Parallel (https://www.gnu.org/software/parallel/parset.html):
parset myarr \
-a input.csv \
--jobs 0 \
--timeout $parallel_timeout \
get_data.sh {}
echo "${myarr[3]}"
Вы можете parset
запускать все комбинации - так же, как и вы с GNU Parallel:
echo www.google.com > input.txt
echo www.bing.com >> input.txt
# Search for both foo and bar on all sites
parset output curl https://{1}/?search={2} :::: input.txt ::: foo bar
echo "${output[1]}"
echo "${output[2]}"
Если вы выполняете различную обработку для foo
и bar
, вы можете создавать функции и запускать их:
# make all new functions, arrays, variables, and aliases defined after this
# available to env_parset
env_parallel --session
foofunc() {
id="$1"
curl -v "http://example.com?id=${id}&key1=value1" | sed '' | cut -f10
}
barfunc() {
id="$1"
curl -v "http://example.com?id=${id}&key2=value2" | awk '{print}'
}
# Run both foofunc and barfunc on all sites
env_parset output {1} {2} ::: foofunc barfunc :::: input.txt
echo "${output[1]}"
echo "${output[2]}"
env_parallel --end-session
--(end-)session
и env_parset
необходимы, если вы не хотите export -f
функций и переменных, которые вы используете в функциях.
GNU Parallel использует временные файлы. Если ваша команда выполняется быстро, то эти временные файлы никогда не касаются диска до их удаления. Вместо этого они остаются в кеше диска в оперативной памяти. Вы даже можете заставить их оставаться в оперативной памяти, указав --tmpdir
на виртуальный диск:
mkdir /dev/shm/mydir
parset output --tmpdir /dev/shm/mydir ...