我用这种方式写了一个简单的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
正如您所看到的,这两个脚本之间的唯一区别在于,在下面的类路径脚本中,我不包括当前目录路径(。)
请让我知道,为什么这不会这样???
答案 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" ...