Bash

在heredoc內部設置變數,在heredoc外部使用變數

  • April 1, 2020

我在 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 user@192.168.1.1: ~/incoming

我正在嘗試在 heredoc 中設置文件名,因為它基於我要連接的主機。然後我想使用該文件名將文件 scp 到另一個位置,但我無法在 heredoc 之外獲取文件名。

建議?

這不是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
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

引用自:https://unix.stackexchange.com/questions/231491