Bash
在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 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