请原谅我这是Bash中一个非常简单的脚本.这是代码:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
Run Code Online (Sandbox Code Playgroud)
运行sh file.sh后:
语法错误:意外的文件结束
cly*_*ish 124
我认为file.sh与CRLF行终止符有关.
跑
dos2unix file.sh
Run Code Online (Sandbox Code Playgroud)
然后问题将得到解决.
您可以在ubuntu中安装dos2unix:
sudo apt-get install dos2unix
Run Code Online (Sandbox Code Playgroud)
uli*_*tko 108
要检查的另一件事(刚刚发生在我身上):
即这个看似无辜的片段会导致同样的错误:
die () { test -n "$@" && echo "$@"; exit 1 }
Run Code Online (Sandbox Code Playgroud)
让哑巴解析器开心:
die () { test -n "$@" && echo "$@"; exit 1; }
Run Code Online (Sandbox Code Playgroud)
mar*_*gaz 32
我也只是通过在if
子句中使用错误的语法得到此错误消息
else if
(语法错误:意外的文件结尾) elif
(正确的语法)我通过注释位来调试它,直到它工作
the*_*ley 13
一个未关闭的if => fi子句也会引发这种情况
提示:如果您的脚本很大,请使用陷阱进行调试...
例如 __CODE__
小智 10
当我在一行中写下“if - fi”语句时遇到了问题:
if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
Run Code Online (Sandbox Code Playgroud)
写多行解决了我的问题:
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
Run Code Online (Sandbox Code Playgroud)
在cygwin我需要: -
export SHELLOPTS
set -o igncr
Run Code Online (Sandbox Code Playgroud)
在.bash_profile中.这样我就不需要运行unix2dos了
我从StackOverflow上的这个类似问题得到了这个答案
在Vim中打开文件并尝试
:set fileformat=unix
将eh行结尾转换为unix结尾,看看是否能解决问题.如果在Vim中编辑,请输入命令:set fileformat = unix并保存文件.其他几个编辑器可以转换行结尾,例如Notepad ++或Atom
谢谢@lemongrassnginger
小智 5
所以我发现这篇文章和答案并没有帮助我,但我能够弄清楚为什么它给了我错误.我曾有一个
cat > temp.txt < EOF
some content
EOF
Run Code Online (Sandbox Code Playgroud)
问题是我将上面的代码复制到一个函数中并无意中标记了代码.需要确保最后一个EOF没有标签.
当我尝试使用括号调用函数时,这发生在我身上,例如
run() {
echo hello
}
run()
Run Code Online (Sandbox Code Playgroud)
应该:
run() {
echo hello
}
run
Run Code Online (Sandbox Code Playgroud)
对于 Windows:
就我而言,我正在使用 Windows 操作系统,并且在运行 autoconf 时遇到了相同的错误。
然后我将带有EOL转换的文件转换为Windows (CR LF),如下所示:
编辑 -> EOL 转换 -> WINDOWS (CR LF)
归档时间: |
|
查看次数: |
184214 次 |
最近记录: |