原谅我,这是Bash中非常简单的脚本。这是代码:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
运行sh file.sh之后:
语法错误:文件意外结束
Answers:
我认为file.sh与CRLF行终止符一起使用。
跑
dos2unix file.sh
然后问题将得到解决。
您可以使用以下方法在ubuntu中安装dos2unix:
sudo apt-get install dos2unix
要检查的另一件事(只是在我身上发生):
即,这个看起来很无辜的代码段将导致相同的错误:
die () { test -n "$@" && echo "$@"; exit 1 }
使愚蠢的解析器高兴:
die () { test -n "$@" && echo "$@"; exit 1; }
;
每条语句的结尾都应该;
这样结尾,例如:if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
将产生该错误,而if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash; fi;
不会...注意结尾处的小分号,即:之后.bash
和fi
。
zsh
用户共享的脚本中使用了此脚本。前者做工作zsh
,但不是sh
也不bash
。希望我是4个人,所以我可以给这4个人投票
通过在if
子句中使用错误的语法,我也刚收到此错误消息
else if
(语法错误:文件意外结束) elif
(正确的语法)我通过注释掉调试它直到工作
一个未关闭的if => fi子句也会引起这个问题
提示:如果脚本很大,请使用陷阱进行调试...
例如
set -x
trap read debug
unexpected end of file
后将立即发生错误fi
。
我从StackOverflow上的类似问题得到了这个答案
在Vim中打开文件,然后尝试
:set fileformat=unix
将eh行尾转换为Unix尾声,看看是否可以解决问题。如果在Vim中编辑,请输入命令:set fileformat = unix并保存文件。其他几种编辑器也可以转换行尾,例如Notepad ++或Atom
谢谢@lemongrassnginger
dos2unix
接受的答案所建议的替代方法。
所以我找到了这篇文章,答案并没有帮助我,但是我能够弄清楚为什么它给了我错误。我曾有一个
cat > temp.txt < EOF
some content
EOF
问题是我将上面的代码复制到了函数中,并在不经意间选中了代码。需要确保未选中最后一个EOF。
EOF
缩进了四个空格,因此bash不能解析它。删除空格可解决此问题。
我能够将您的代码剪切并粘贴到文件中,并且可以正确运行。如果像这样执行它,它应该可以工作:
您的“ file.sh”:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
命令:
$ ./file.sh arg1 arg2 arg3
请注意,“ file.sh”必须是可执行的:
$ chmod +x file.sh
您可能会因为输入方式(带有管道,胡萝卜等)而收到错误b / c。您也可以尝试将条件分为两个:
if [ $# -lt 3 ] || [ $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
或者,由于您正在使用bash
,因此可以使用内置语法:
if [[ $# -lt 3 || $# -gt 3 ]]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
最后,您当然可以只检查是否给出了3个参数(干净,保持POSIX shell兼容性):
if [ $# -ne 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
确保存在.sh文件的目录名称没有空格字符。例如:说如果它位于一个名为“ New Folder”的文件夹中,那么您肯定会遇到所引用的错误。而是将其命名为“ New_Folder”。我希望这有帮助。
就我而言,\
以下是多余的:
function foo() {
python tools/run_net.py \
--cfg configs/Kinetics/X3D_8x8_R50.yaml \
NUM_GPUS 1 \
TRAIN.BATCH_SIZE 8 \
SOLVER.BASE_LR 0.0125 \
DATA.PATH_TO_DATA_DIR ./afs/kinetics400 \
DATA.PATH_PREFIX ./afs/kinetics400 \ # Error
}
有不是一个\
在结束DATA.PATH_PREFIX ./afs/kinetics400