Как перебрать вывод базового имени через SSH - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь просмотреть несколько известных каталогов на удаленных машинах и найти последнюю полную папку для резервного копирования. Можно предположить, что я начинаю с массива путей в стиле SCP, например, host:/path/to/dir

for path in ${paths[@]}
do
  IFS=':' read host backupDir <<< "$path"

  result=`ssh "$host" 'basename $(find '"$backupDir"'/* -type d -maxdepth 1)'`

  echo "$result"
  readarray -t backups <<<"$result"
  echo "$backups"

  for backup in "$backups"
  do
    echo 1
    echo "$backup"
  done
done

echo "$result" предполагает, что результаты SSH соответствуют ожидаемым, перечисляя несколько имен папок, по одному на строку.

Однако, echo $backups показывает только первую папку, и, конечно, внутренний цикл аналогично отражает только одну запись в массиве $ backups. Я пробовал readarray, я пробовал read -a конструкции с различными настройками IFS, но что-то ускользает от меня о том, как правильно обработать вывод из запроса SSH.

1 Ответ

0 голосов
/ 03 сентября 2018

Если у вас есть массив, доступ к нему через $array дает только первый элемент. Вы должны использовать обозначение ${array[@]}.

for path in ${paths[@]}
do
  IFS=':' read host backupDir <<< "$path"

  result=`ssh "$host" 'basename $(find '"$backupDir"'/* -type d -maxdepth 1)'`

  echo "$result"
  readarray -t backups <<<"$result"
  echo "${backups[@]}"

  for backup in "${backups[@]}"
  do
    echo 1
    echo "$backup"
  done
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...