如何通过SSH

时间:2018-09-03 10:48:41

标签: bash ssh

我正在尝试浏览远程计算机上的几个已知目录,并找到最新的完整备份文件夹。我们可以假设我从一系列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,我尝试过使用各种IFS设置的read -a构造,但是对于如何正确处理SSH请求的输出却有些莫名其妙。

1 个答案:

答案 0 :(得分:1)

如果那里有一个数组,则通过$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