我正在尝试在bash中创建多行变量,但遇到错误“在寻找匹配的')'时出现意外的EOF”

时间:2019-10-16 01:20:38

标签: linux bash

我试图用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"
}

1 个答案:

答案 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
)"