在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 启动的 shell 中评估的。它无法对本地 shell 上的变量产生任何影响。

因此,请执行以下操作:

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

相关内容