我有一个需要从主脚本中调用现有变量的heredoc,和设置自己的变量以便稍后使用。像这样:
count=0
ssh $other_host <<ENDSSH
if [[ "${count}" == "0" ]]; then
output="string1"
else
output="string2"
fi
echo output
ENDSSH
这不起作用,因为&#39;输出&#39;没有设置任何东西。
我尝试使用此问题的解决方案:
count=0
ssh $other_host << \ENDSSH
if [[ "${count}" == "0" ]]; then
output="string1"
else
output="string2"
fi
echo output
ENDSSH
它也没有用。 $ output设置为&#34; string2&#34;因为$ count没有扩展。
如何使用从父脚本扩展变量的heredoc,和设置自己的变量?
答案 0 :(得分:3)
您可以使用:
count=0
ssh -t -t "$other_host" << ENDSSH
if [[ "${count}" == "0" ]]; then
output="string1"
else
output="string2"
fi
echo "\$output"
exit
ENDSSH
我们使用\$output
使其在远程主机上展开,而不是在本地扩展。
答案 1 :(得分:1)
better not to use stdin(例如使用here-docs)将命令传递给IntTree
。
如果使用命令行参数来传递shell命令,则可以更好地分离本地扩展的内容和远程执行的内容:
MyTree
答案 2 :(得分:0)
你可以像@anubhava所说的那样转义变量,或者,如果转换得到太多的变量,你可以分两步完成:
# prepare the part which should not be expanded
# note the quoted 'EOF'
read -r -d '' commands <<'EOF'
if [[ "$count" == "0" ]]; then
echo "$count - $HOME"
else
echo "$count - $PATH"
fi
EOF
localcount=1
#use the unquoted ENDSSH
ssh me@nox.local <<ENDSSH
count=$localcount # count=1
#here will be inserted the above prepared commands
$commands
ENDSSH
将打印如下内容:
1 - /usr/bin:/bin:/usr/sbin:/sbin