ssh、heredoc 和环境变量

ssh、heredoc 和环境变量

(如果重要的话,这是 RHEL 8.4。)

该脚本中第 5 行和第 7 行的命令echo在本地主机上运行,​​但hostname第 6 行和第 8 行的命令按预期在远程主机上运行。

为什么第5行和第7行在本地主机上运行?更重要的是,如何让它们在远程主机上运行?

编辑:我不要传入变量。我希望变量在远程服务器上单独定义和使用。

 1 #!/bin/bash
 2 export foo=bar
 3 ssh -q ${1} <<EOF
 4     export foo=blarge
 5     echo $foo
 6     hostname
 7     echo $foo
 8     hostname
 9 EOF
10 hostname

答案1

使用引用的 EOF:

$ ssh -q localhost <<'EOF'
export foo=blarge
echo $foo
EOF
blarge

您没有指定您使用的 shell,但man bash 例如它说:

如果引用了 word 的任何部分,则分隔符是对 word 删除引号的结果,并且此处文档中的行不会扩展。

相关内容