Set variável dentro heredoc, use variável fora heredoc

1

Eu tenho o seguinte em um script bash

ssh -T -i ${ssh_key} ${ssh_user}@${host} <<- 'EOF'
  file='hostname'.tar.gz
  echo "file: " $file 
  ### prints>> file: some-host-name.tar.gz 
EOF

scp -i ${ssh_key} ${ssh_user}@${host}:${file} ~/incoming
### prints>> scp -i /home/user/.ssh/key.pem [email protected]: ~/incoming

Estou tentando definir o nome do arquivo dentro do heredoc, já que é baseado no host ao qual estou me conectando. Eu então quero usar esse nome de arquivo para scp o arquivo para outro local, mas não consigo obter o nome do arquivo fora do heredoc.

Sugestões?

    
por richj 23.09.2015 / 08:47

1 resposta

2

Não é uma questão de heredocs. Se você corresse:

ssh -i ${ssh_key} ${ssh_user}@${host} sh -c '
  file='hostname'.tar.gz
  echo "file: " $file
'

O efeito teria sido o mesmo. Point sendo: a variável é avaliada no shell iniciado pelo SSH no servidor remoto. Não há nada que possa fazer para afetar uma variável no shell local.

Então, em vez disso, faça:

file=$(ssh -i ${ssh_key} ${ssh_user}@${host} hostname).tar.gz
scp -i ${ssh_key} ${ssh_user}@${host}:${file} ~/incoming
    
por 23.09.2015 / 08:59