ssh remotecluster 'bash -s' << EOF
> export TEST="sdfsd"
> echo $TEST
> EOF
这不会打印任何内容。
即使我将变量存储到文件中并将其复制到远程,它仍然无效。
TEST="sdfsdf"
echo $TEST > temp.par
scp temp.par remotecluster
ssh remotecluster 'bash -s' << EOF
> export test2=`cat temp.par`
> echo $test2
> EOF
仍然没有打印。
所以我的问题是如何将局部变量作为变量传递给远程机器?
已在this
中提供答案答案 0 :(得分:3)
此处文档中给出的变量赋值TEST="sdfsd"
不是真正的变量赋值,i。即变量赋值实际上不会直接在here文档的声明/定义中执行(但稍后当shell文档被shell评估时)。
此外,在本地shell执行$TEST
命令之前,本地shell 将扩展未转义或未引用此处文档中包含的ssh
变量。
结果是$TEST
将被解析为空字符串,如果它没有在分别在ssh
命令或here文档之前的本地shell 中定义。
因此,here文档中的变量赋值export TEST="sdfsd"
将不会在本地shell中生效,但首先会被发送到远程主机的shell,并且只会扩展,因此您的没有打印任何经验。
解决方案是使用转义或单引号的文档<<\EOF
或<<'EOF'
;或者只转义here文档中的\$TEST
变量;或者只是在$TEST
命令(和此处的文档)之前定义ssh
变量。
# prints sdfsd
export TEST="sdfsd"
ssh localhost 'bash -s' << EOF
echo $TEST
EOF
# prints sdfsd
ssh localhost 'bash -s' << EOF
export TEST="sdfsd"
echo \$TEST
EOF
# prints sdfsd
ssh localhost 'bash -s' <<'EOF'
export TEST="sdfsd"
echo $TEST
EOF
答案 1 :(得分:0)
导出变量,ssh将导出的(环境)变量发送到服务器 export VAR = test ssh -v 127.0.0.1 echo $ VAR 测试上面的命令并查看结果