Precisa acessar o array após sair do SSH no script bash

0

Eu preciso acessar o array que é criado dinamicamente.

Primeiro, olhe para o código:

ssh [email protected] <<'ENDSSH'
cd /home/ubuntu/user/someFolder
array=('find . -name 'something*'')
len=${#array[*]}

i=0
while [ $i -lt $len ]; do
    let i++
done
echo  "${array[*]}"  #here I can access array values
ENDSSH
#Just above i have exited from ssh & now I need to access array values but not getting.
echo  "${array[*]}" #here I'm unable to get array values
exit

Então, minha preocupação é acessar o array após o ENDSSH.

Atenciosamente & Obrigado, Shubham Kumar

    
por Shubham Kumar Rohit 03.07.2018 / 16:30

2 respostas

2

Como você está confortável usando backticks e find para construir o array, você claramente não está preocupado com a serialização dos dados de forma robusta (por exemplo, os espaços em branco na saída de find serão divididos em elemento distinto da matriz, que pode não ser desejado), então faça:

array=($( ssh [email protected] sh -c "find . -name 'something*'"))

e construa o array no host local.

    
por 03.07.2018 / 16:39
0

De um dos seus comentários , parece que o que você pretende fazer é criar uma lista de nomes de caminho dos arquivos que você gostaria de transferir do sistema remoto para a máquina local usando scp . O problema com isso é que você passa nomes de caminho entre os dois sistemas, o que introduz o risco de que nomes de arquivos que incluam caracteres em branco possam ser desconfigurados.

Se você está procurando uma maneira de transferir todos os arquivos que correspondem a something* de algum lugar abaixo de /home/ubuntu/user/someFolder na máquina remota, você pode usar rsync assim:

rsync -av --include='*/' --include='something*' --exclude='*' \
    --prune-empty-dirs \
    [email protected]:/home/ubuntu/user/someFolder/ ./target

Isso localizaria e transferiria todos os arquivos correspondentes ao padrão e à estrutura de diretório em que eles residem para a máquina local no caminho ./target .

Os padrões --include e --exclude são aplicados da esquerda para a direita e a primeira correspondência é o que importa:

  • --include='*/' : procure em todos os subdiretórios (diretórios vazios, ou seja, diretórios sem nomes de arquivos correspondentes, não são transferidos devido a --prune-empty-dirs ).
  • --include='something*' : o padrão que combinaria com as coisas em que estamos realmente interessados.
  • --exclude='*' : ignora todo o resto.
por 03.07.2018 / 17:58