5
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

仍然没有打印任何内容。

所以我的问题是如何将局部变量作为变量传递给远程机器?

答案已在此给出

4

2 回答 2

4

here文档中给出的变量赋值TEST="sdfsd"不是真正的变量赋值,即变量赋值实际上不会直接在here文档的声明/定义中执行(但稍后当here文档被shell评估时)。

此外,$TEST未转义或未引用的 here 文档中包含的变量将在本地 shell 执行命令之前由本地 shell扩展。ssh结果是,如果在命令或此处文档之前$TEST本地 shell 中未分别定义它,它将被解析为空字符串。ssh

因此,export TEST="sdfsd"here文档中的变量赋值在本地shell中不会生效,而是先发送到远程主机的shell,然后才被扩展,因此你的打印没有任何经验。

解决方案是使用转义或单引号的此处文档,<<\EOF<<'EOF'; 或仅转义\$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
于 2014-02-16T16:55:08.573 回答
0

导出变量,ssh 将导出的(环境)变量发送到服务器 export VAR=test ssh -v 127.0.0.1 echo $VAR test 以上命令并查看结果

于 2013-04-03T05:04:51.610 回答