(如果重要的话,这是 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 删除引号的结果,并且此处文档中的行不会扩展。