使用bash here-doc“意外的文件结束”时出错

时间:2013-11-14 19:26:26

标签: bash ssh

我收到以下错误,该错误在我的代码的最后一行标记(为空):

syntax error: unexpected end of file

我无法弄清楚为什么会这样说。我只是尝试使用here-doc进行ssh连接:

#!/bin/sh

connectToServer() {
   ssh -t root@$1 <<- ENDSSH
      echo "Connected to server!"
   ENDSSH
}

connectToServer $1

这段代码出了什么问题?

修改

感谢帮助我排除故障的那些人。我的剧本有一些问题;我在线上使用空格:

echo "Connected to server" 

而不是制表符。我还在结束ENDSSH之前包括空格,这导致了EOF。这些更改是我的问题的一部分,但解决它的最后一件事是删除在我关闭ENDSSH之后出现的额外空格字符。

3 个答案:

答案 0 :(得分:13)

在关闭ENDSSH之前,问题是空格。取出ENDSSH之前的所有前导空格。

答案 1 :(得分:8)

ENDSSH标记必须位于左边距:

connectToServer() {
   ssh -t root@$1 << ENDSSH
      echo "Connected to server!"
ENDSSH
}

使用<<- ENDSSH时,您可以缩进标记,但必须使用 Tab 字符缩进,而不是空格。

答案 2 :(得分:1)

使用<<-运算符时,只会从here文档和包含标记的行中删除前导标签。您似乎使用空格缩进结束标记,因此该行似乎是此文档的一部分,并且由于此文档永远不会关闭,因此您在解析文件时会到达该文件的末尾。