我写了一些脚本,并有意外的文件结尾
echo off
if [$JAVA_HOME = ""]; then goto no_java_home fi
if [$SRV_HOME = ""]; then goto no_srv_home fi
echo Uses JAVA_HOME=$JAVA_HOME
echo Uses SRV_HOME=$SRV_HOME
export ACP=""
export ACP=$ACP;$JAVA_HOME/lib/tools.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-launcher.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-nodeps.jar
export ACP=$ACP;$SRV_HOME/ant/lib/optional.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-contrib-1.0b3.jar
$JAVA_HOME/bin/java -Xmx512m -classpath $ACP org.apache.tools.ant.Main -buildfile $SRV_HOME/ant/ant_script.xml %*
goto ends
no_srv_home:
clear
echo "You should set the TMX_HOME environment variable. For example: TMX_HOME=d:\MYSERVER"
goto ends
no_java_home:
clear
echo "You should set the JAVA_HOME environment variable"
goto ends
ends: echo "OK"我的问题在哪里?
发布于 2010-10-28 08:13:03
您的问题是,您的脚本看起来像是bash和cmd语法的随意混合。这是一个bash脚本。
if [ "$JAVA_HOME" = "" ]; then
echo 1>&2 "$0: You need to set the JAVA_HOME variable, e.g.: export JAVA_HOME='c:/java'"
exit 2
fi
if [ "$SRV_HOME" = "" ]; then
echo 1>&2 "$0: You need to set the SRV_HOME variable, e.g.: export SRV_HOME='d:/myserver'"
exit 2
fi
echo "$0: Uses JAVA_HOME=$JAVA_HOME"
echo "$0: Uses SRV_HOME=$SRV_HOME"
ACP="$JAVA_HOME/lib/tools.jar"
for x in ant ant-launcher ant-nodeps optional ant-contrib-1.0b3; do
ACP="$ACP;$SRV_HOME/ant/lib/$x.jar"
done
"$JAVA_HOME/bin/java" -Xmx512m -classpath "$ACP" \
org.apache.tools.ant.Main \
-buildfile "$SRV_HOME/ant/ant_script.xml" \
"$@"以下是我改正的内容列表:
[ … ]需要在括号的两边都有空格(除了标点符号,如;).$foo)应该在双引号中(否则,如果变量的值包含特定的特殊字符,如goto消息应该显示在错误输出上:echo 1>&2 "this is an error message" ),外壳程序将做一些奇怪的事情。(这也适用于cmd脚本。);是内部脚本变量,因此不需要将其导出到ACP是特殊字符,所以当你想在string."$@".%*就是bash的etc。在每个错误message.$0是很好的做法,您可以在行尾使用反斜杠来中断一个很长的命令行。发布于 2010-10-27 19:14:06
Goto,真的吗?
更改if语句以在fi之前添加分号
if [$JAVA_HOME = ""]; then goto no_java_home ; fi例如。
您的shell无法区分no_java_home命令和fi命令,因为它们出现在同一行中,没有分号分隔符或任何可以结束语句的内容。使用clear echo的代码行也有同样的问题;就sh而言,这里使用echo作为清除命令的参数,而不是一个单独的命令。
但是,请在不使用goto的情况下重写此代码!
如下所示:
if [$JAVA_HOME = ""] ; then
clear
echo "You should set the JAVA_HOME environment variable"
elif [$SRV_HOME = ""] ; then
clear
echo "You should set the TMX_HOME environment variable. For example: TMX_HOME=d:\MYSERVER"
else
echo Uses JAVA_HOME=$JAVA_HOME
echo Uses SRV_HOME=$SRV_HOME
export ACP=""
export ACP=$ACP;$JAVA_HOME/lib/tools.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-launcher.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-nodeps.jar
export ACP=$ACP;$SRV_HOME/ant/lib/optional.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-contrib-1.0b3.jar
$JAVA_HOME/bin/java -Xmx512m -classpath $ACP org.apache.tools.ant.Main -buildfile
$SRV_HOME/ant/ant_script.xml %*
fi
echo "OK"发布于 2010-10-27 19:29:45
如果我以不同的方式重写以下行,意外的文件结束错误就会消失。
原始行:
if [$JAVA_HOME = ""]; then goto no_java_home fi
if [$SRV_HOME = ""]; then goto no_srv_home fi 更新:
if [$JAVA_HOME = ""]; then
goto no_java_home
fi
if [$SRV_HOME = ""]; then
goto no_srv_home
fi https://stackoverflow.com/questions/4032089
复制相似问题