lgar писал(а): ↑06.08.2012 20:39
Код: Выделить всё
for hostserv in $(for i in `echo "${server[@]}"`; do echo $i; done | sort | uniq); do echo $hostserv; ssh $hostserv "eval $sudo $su ${cmd[@]}"; done
Ох, вот это вы наворотили вложенного парсинга...
Удалённый шелл в ssh, eval, su, присваивание массива (которое вы не привели), плюс я не помню, выполняет ли парсинг sudo.
При каждом парсинге убирается один уровень экранирования и подставляются переменные.
Можно, конечно, просчитать нужное количество экранирующих символов, но это всё равно, что на brainfuck'е писать. Тем более, насколько я понял, sudo и su у вас могут быть, а могут не быть, и это означает разное количество бэкслэшей. Лучше всего упростите код. Например, я не вижу, зачем вам выполнять awk удалённо. Если возможно, попробуйте свести всё к
ssh "$hostserv" "$VERY_simple_command" | обработка | обработка
где удалённо выполняется только очень простая команда, целиком находящаяся в одной переменной.