使用bash here doc时出错;意外的文件结尾“;

使用bash here doc时出错;意外的文件结尾“;,bash,ssh,Bash,Ssh,我在代码的最后一行(为空)标记了以下错误: 我不明白它为什么这么说。我只是尝试使用here doc进行ssh连接: #!/bin/sh connectToServer() { ssh -t root@$1 <<- ENDSSH echo "Connected to server!" ENDSSH } connectToServer $1 而不是制表符。我还在导致EOF的结束ENDSSH之前包含空格。这些更改是我问题的一部分,但解决问题的最后一件事是删除在

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

我不明白它为什么这么说。我只是尝试使用
here doc
进行ssh连接:

#!/bin/sh

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

connectToServer $1

而不是制表符。我还在导致EOF的结束
ENDSSH
之前包含空格。这些更改是我问题的一部分,但解决问题的最后一件事是删除在关闭
ENDSSH
后出现的额外空格字符。问题是关闭
ENDSSH
之前的空格。去掉
ENDSSH
之前的所有前导空格
ENDSSH
标记必须位于左边距:

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

ssh-t root@$1当使用
时,我刚刚尝试了这个,错误是一样的。-/I在关闭
ENDSSSH
之前放置空格,复制了相同的错误。当我去掉所有前导空格时,它消失了。我将脚本传输到
hextdump-C
并发现它不是前导空格或
ENDSSH
之前的任何字符作为
0a
ENDSSH
后面的换行符。我去掉了它,现在它可以工作了。谢谢你帮我找到这个!你是说
0d
?这是一个CR,这意味着你在Windows上编辑了文件,在移动到Unix时忘记了将CRLF转换为LF。@Barmar很好,我刚刚查看了hexdu的输出mp,它不是
0a
而是在关闭
ENDSSH
后的一个额外空间
20
,我刚刚尝试了这个,在我的线路上,我已经
echo“连接到服务器!”我删除了所有空格并使用了制表符。我还删除了结尾
ENDSSH`中的空格,我仍然有相同的错误消息。这与anubhava和我回答的不一样吗?这不是我开始打字的时候。(不过,我想我错过了你答案最后一句中的评论)。
echo "Connected to server" 
connectToServer() {
   ssh -t root@$1 << ENDSSH
      echo "Connected to server!"
ENDSSH
}