在Linux脚本中设置classPath

时间:2012-03-12 09:32:59

标签: linux

我用这种方式写了一个简单的Linux脚本

export JAVA_HOME=/usr/local/jdk1.6.0_20
export PATH=/usr/local/jdk1.6.0_20/bin
LIB_DIR=/home/praveen/lib

export CLASSPATH=.:$LIB_DIR/commons-logging-1.0.4.jar:$LIB_DIR/log4j-1.2.8.jar

 java -cp $CLASSPATH com.test.Sample

============================================ ===================================

上面的脚本运行正常。

但是当我第一次尝试使用它时,却发出错误

export JAVA_HOME=/usr/local/jdk1.6.0_20
export PATH=/usr/local/jdk1.6.0_20/bin
export CLASSPATH = /home/praveen/lib/commons-logging-1.0.4.jar: /home/praveen/lib/log4j-1.2.8.jar

  java -cp $CLASSPATH com.test.Sample

正如您所看到的,这两个脚本之间的唯一区别在于,在下面的类路径脚本中,我不包括当前目录路径(。)

请让我知道,为什么这不会这样???

3 个答案:

答案 0 :(得分:5)

您需要使用:

export CLASSPATH=/home/praveen/lib/commons-logging-1.0.4.jar:/home/praveen/lib/log4j-1.2.8.jar

而不是:

export CLASSPATH = /home/praveen/lib/commons-logging-1.0.4.jar: /home/praveen/lib/log4j-1.2.8.jar

您不能在shell脚本中的变量名和等号之间放置空格。

答案 1 :(得分:0)

设置变量时不应该放任何空格,而不是'='周围的空格,它应该是:

export CLASSPATH=/home/praveen/lib/commons-logging-1.0.4.jar:/home/praveen/lib/log4j-1.2.8.jar

如果其中一个元素中有空格,则使用单引号或双引号,例如:

MY_VAR1=' variable with spaces'
MY_VAR2=variable_without_spaces
export MY_VAR3="${MY_VAR1}${MY_VAR2}"

答案 2 :(得分:-1)

试试这个......:

#!/bin/bash
export JAVA_HOME=...

cp=$(find lib -name "*.jar" -exec printf :{} ';')
if [[ -n "$CLASSPATH" ]]; then
    cp="$cp;CLASSPATH"
fi

"$JAVA_HOME/bin/java" -classpath "$cp" ...