Да, но ваш вывод может быть искажен. Лучше, чтобы функция записывала свой вывод в определенный файл в зависимости от имени хоста, а затем позволяла основному сценарию объединить результат (и очистить).
Кроме того, вы должны заключать переменные в двойные кавычки. Скопируйте и вставьте сценарий в ShellCheck .
Может быть, что-то вроде этого:
#!/bin/bash
hosts=( host1 host2 host3 )
outfile="nvidia_smi.txt"
rm -f "$outfile"
function process_host {
local host="$1"
local hostout="$host.out"
printf "Processing host '%s'\n" "$host"
echo "$host" >"$hostout"
ssh "$host" nvidia-smi >>"$hostout"
}
for host in "${hosts[@]}"; do
process_host "$host" &
done
wait
for host in "${hosts[@]}"; do
hostout="$host.out"
cat "$hostout"
rm -f "$hostout"
done >"$outfile"
cat "$outfile"
Последний цикл можно заменить на
cat "${hosts[@]/%/.out}" >"$outfile"
rm -f "${hosts[@]/%/.out}"