我有RHEL 5.9 Bash版本3.2.25(1) 有以下错误堆栈跟踪:
line 30: syntax error near unexpected token '('
line 30: 'for i in $( ls "$2"/*.jar );
这是sh
的整个代码if [ -z "$JAVA_HOME" ]; then
echo "Echo Message 1"
echo "Echo Message 2"
exit 1
fi
if [ ! -x "$JAVA_HOME"/bin/java ]; then
echo "Echo Message 3"
echo "Echo Message 4"
exit 1
fi
if [ -z "$1" ]; then
echo Echo Message 5: OK
exit 1
if [ ! -x "$1" ]; then
echo Message 6: You supplied $1
exit 1
fi
if [ -z "$2" ]; then
echo Message 7 : OK
exit 1
if [ ! -x "$2" ]; then
echo Message 8: You supplied $2
exit 1
fi
for i in "$2"/*.jar
do
CLASSPATH=$CLASSPATH:$i
done
_EXECJAVA = "$JAVA_HOME"/bin/java
CLASSPATH="$JAVA_HOME"/lib/tools.jar
_EXEC="$_EXECJAVA -classpath "$CLASSPATH"
com.example.test.Transaction $3"
$_EXEC
答案 0 :(得分:1)
从语法上讲,你的代码看起来很好。前一行可能存在一个不同的错误,它会混淆bash
解析器,导致它不期望命令替换。要帮助跟踪该问题,请使用
for i in "$2"/*.jar
这是在任何情况下迭代一组文件名的正确方法。你仍然会收到一个错误,但也许不同的错误会帮助你弄清楚第1--29行的实际错误是什么。
您错过了使用消息5和7的fi
语句的结束if
。