heredoc 내부에 변수를 설정하고 heredoc 외부에서 변수를 사용하십시오.

heredoc 내부에 변수를 설정하고 heredoc 외부에서 변수를 사용하십시오.

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

연결하려는 호스트를 기반으로 하는 heredoc에서 파일 이름을 설정하려고 합니다. 그런 다음 해당 파일 이름을 사용하여 파일을 다른 위치로 scp하고 싶지만 heredoc 외부에서 파일 이름을 가져올 수 없습니다.

제안?

답변1

이것은 heredocs에는 문제가 되지 않습니다. 실행하는 경우:

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

효과는 동일합니다. 주요 요점은 변수가 원격 서버의 SSH를 통해 시작된 셸에서 평가된다는 것입니다. 로컬 쉘의 변수에는 영향을 미치지 않습니다.

따라서 다음을 수행하십시오.

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

답변2

remote_user_name=user
instance_ip=127.0.0.1
external=$(ls /home/)

ssh -T -i ${private_key}  -l ${remote_user_name} ${instance_ip} << END
  internal=\$(ls /home/)
  echo "\${internal}"
  echo "${external}"
END

관련 정보