我试图用bash编写函数。该功能的输入是主机的IP地址。函数应通过ssh托管并在远程主机上运行多个命令。
我定义了多行变量,但出现以下错误。
./ RCAatuo.sh:第8行:寻找匹配的')'时出现意外的EOF ./RCAatuo.sh:第14行:语法错误:文件意外结束
loginvCUvDU()
{
echo hellow
HostIpv6=$1
echo $HostIpv6
su_cmd= "$(cat <<-EOF
echo ----------hi----
EOF
)"
sshpass -p $vDUvCUPass ssh -tt vm-root@$HostIpv6 "$su_cmd"
}
答案 0 :(得分:0)
从表面上看,无需将<<
嵌入到命令替换中(“ $ cat <<”)。从问题来看,目标似乎是将多个命令传递给sshpass
loginvCUvDU()
{
echo hellow
HostIpv6=$1
echo $HostIpv6
# Multiline constant
su_cmd="
echo ----------hi----
echo ----------CMD2----
"
sshpass -p $vDUvCUPass ssh -tt vm-root@$HostIpv6 "$su_cmd"
}
请注意,问题是使用'-EOF'分隔符。在这种情况下,条带制表符的逻辑不适用,因为该字符串要远程执行。结果,bash看不到EOF指示器(带空格前缀)。编辑:每条评论,可能这不是问题。很难判断终止“ EOF”之前的间隙是制表符还是空格。
下面的更改将使代码能够通过解析(1)消除su_cmd =之后的空间,以及(2)消除EOF之前的空间。
su_cmd="$(cat <<EOF
echo ----------hi----
EOF
)"