А как в bash при запуске функции в фоне вернуть результат? Про fifo знаю.
#!/usr/bin/env bash
declare -A results=([test1]=TEST1)
results["test2"]="TEST2"
# Function to perform a task
function search_param {
local -n res=$3
echo "Searching $1 on $2"
sleep 2
echo "Searchin on $2 completed"
res[$2]="searching $2"
}
# Array to hold background process IDs
PIDS=()
param='1234'
declare -a hosts=("host1" "host2" "host3")
# Execute tasks in separate threads
for host in "${hosts[@]}"; do
search_param $param $host results &
PIDS+=($!)
done
# Wait for all threads to finish
for pid in "${PIDS[@]}"; do
wait $pid
done
echo "All threads completed."
for i in "${!results[@]}"; do echo "${i}: ${results[$i]}"; done
exit 0
если запускать не в фоне
search_param $param $host results
то скрипт правильно отработает, но в 3 раза дольше, чем хотелось бы.
В принципе понимаю, почему так происходит. Хотелось бы найти решение.