使用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
}