此脚本中的第5行有什么问题(我已经包含了代码片段,它给出了错误,代码后面的底部列出了实际错误以及完成脚本的链接)?
#! /bin/bash
INSTALLDIR=/usr/local/mapguideopensource
CLEAN_FLAG=0
while [ $# -gt 0 ]; do # Until you run out of parameters...
case "$1" in
-prefix|--prefix)
INSTALLDIR="$2"
shift
;;
-clean|--clean)
CLEAN_FLAG=1
shift
;;
-help|--help)
echo "Usage: $0 (options)"
echo "Options:"
echo " --prefix [installation directory]"
echo " --clean [clean all objects and binaries in Oem]"
echo " --help [Display usage]"
exit
;;
esac
shift # Check next set of parameters.
done
这是我在linux上运行这个bash脚本时遇到的错误(REHL5):
: command not founde 4:
: command not founde 8:
: command not founde 8:
: command not founde 12:
MapGuide Open Source build script for OEM components
'/build_oem.sh: line 17: syntax error near unexpected token `in
'/build_oem.sh: line 17: ` case "$1" in
请注意,上面的行号对应于我正在运行的实际脚本(我在下面包含了该脚本的链接) The original script i am running
答案 0 :(得分:4)
从错误中,我很确定你在行尾有回车(又名CR或^ M)。 Windows / DOS文本文件在每一行的末尾都有回车符和换行符,但是unix程序(比如bash)只是期望一个换行符,如果还有一个CR就会非常混乱。赠品是错误消息,如:
: command not founde 4:
这实际上是./build_oem.sh: line 4: ^M: command not found
,但是回车使终端返回到行的开头,并在消息的开头写下消息的结尾:
./build_oem.sh: line 4:
: command not found
|
V
: command not founde 4:
要修复脚本,请使用dos2unix将其转换为正确的unix格式,然后切换到以unix格式保存的文本编辑器。
答案 1 :(得分:3)
choroba说了什么,但也注意到你的shebang必须在第一行(它不是),否则它是无用的,因为它只是一个简单的评论然后它不一定会在bash
。
答案 2 :(得分:1)
在原始脚本中,第4行和第8行为空。线上可能有一些看不见的控制字符。试试xxd build_oem.sh
。