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