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

おすすめ記事