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

関連情報