Essa abordagem usa três matrizes, uma para cada argumento do my_command
:
pids=()
a=("$URL_ONE" "$URL_ONE" "$URL_TWO" "$URL_THREE")
b=("$URL_ONE_TEXT" "$URL_TWO_TEXT" "$URL_TWO_TEXT" "$URL_THREE_TEXT")
c=("${TMP_DIR}/some_dir" "${TMP_DIR}/some_similar_dir" "${TMP_DIR}/third_dir" "${TMP_DIR}/fourth_dir")
for i in ${!a[@]}
do
my_command "${a[$i]}" "${b[$i]}" "${c[$i]}" &
pids+=("$!")
done
# Wait for parallel commands to complete and exit if any fail.
for pid in "${pids[@]}"
do
if ! wait "$pid"
then
errecho "Failed."
exit 1
fi
done
Estilo alternativo
Dependendo de quantos comandos devem ser executados, você pode considerar a seguinte alternativa para definir as matrizes:
a=(); b=(); c=()
a+=("$URL_ONE"); b+=("$URL_ONE_TEXT"); c+=("${TMP_DIR}/some_dir")
a+=("$URL_ONE"); b+=("$URL_TWO_TEXT"); c+=("${TMP_DIR}/some_similar_dir")
a+=("$URL_TWO"); b+=("$URL_TWO_TEXT"); c+=("${TMP_DIR}/third_dir")
a+=("$URL_THREE"); b+=("$URL_THREE_TEXT"); c+=("${TMP_DIR}/fourth_dir")