运行$ PWD / filename.sh时运行正常,但运行./filename.sh时出错

时间:2014-05-26 05:55:03

标签: shell sh redhat

当我运行$PWD/filename.sh时,它运行正常,但当我运行./filename.sh时出现错误

could not find or load main class 

任何人都可以解释为什么以及如何使其与./filename.sh

一起使用
#!/bin/sh
# bash script here
SCRIPTDIR=`dirname $0`
Example_HOME=/opt/example/example
export CENTRASITE_HOME

. ${Example_HOME}/bin/example_setenv.sh

#set -xv

# -----------------------------------------------------------------------------

# extend PATH where to find executables
#
PATH=$PATH:$CENTRASITE_HOME/install
PATH=$PATH:$CENTRASITE_HOME/bin
export PATH

# extend the Java option settings
JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx512m"
export JAVA_OPTS

# -----------------------------------------------------------------------------

MY_HOME=$Example_HOME/bin/cfg

# -----------------------------------------------------------------------------
#
# add cfg directory to LD_LIBRARY_PATH etc.
#

#Solaris
LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}${LD_LIBRARY_PATH:+":"}$MY_HOME
export LD_LIBRARY_PATH

#HP-UX
SHLIB_PATH=${SHLIB_PATH:-}${SHLIB_PATH:+":"}$MY_HOME
export SHLIB_PATH

#AIX51
LIBPATH=${LIBPATH:-}${LIBPATH:+":"}$MY_HOME
export LIBPATH

# -----------------------------------------------------------------------------
#
# set CLASSPATH
#
RED=${Example_HOME}/red
CLASSPATH="$RED:$RED/*"
RT_PATH=${Example_HOME}/rt/bin

LOCAL_CLASSPATH="${SCRIPTDIR}/lib/*:${CENTRASITE_HOME}/lib/*:${RTS_PATH}/*:${REDIST}/*"
export CLASSPATH

#
### parameter handling
#
PROG=`basename $0`
ERROR=0

CLASS="main.com.example"
export CLASS`enter code here`

UI=${Example_HOME}/cast/

classpath=$CLASSPATH
localclasspath=$LOCAL_CLASSPATH

#
# Always change to an existing working directory to avoid Java error

WORKDIR=`pwd`
cd $CENTRASITE_HOME
EXECUTABLE="${CS_JAVA_EXE}"
EXECUTABLE="$EXECUTABLE ${JAVA_OPTS} -cp"
EXECUTABLE="$EXECUTABLE ${LOCAL_CLASSPATH} ${CLASS}"

#  $EXECUTABLE "$@"
$EXECUTABLE "$UI $@"
#$EXECUTABLE "$UI $@"
RC=$?

#------------------------------------------------------------------------------

cd $WORKDIR

exit $RC

1 个答案:

答案 0 :(得分:3)

问题在于:

SCRIPTDIR=`dirname $0`
当程序以$PWD启动时,

使用SCRIPTDIR作为$PWD/filename.sh.使用SCRIPTDIR作为./filename.sh。然后使用LOCAL_CLASSPATH$SCRIPTDIR设置为其中一个目录。不幸的是,稍后该计划确实:

cd $CENTRASITE_HOME

这意味着使用绝对路径名,使用$SCRIPTDIR仍然有效,但使用.会完全打破$SCRIPTDIR的位置。

您需要确定$SCRIPTDIR的绝对路径名,而不管它是如何被调用的(没有路径的情况会很有趣)。


这些界限令人费解:

Example_HOME=/opt/example/example
export CENTRASITE_HOME

我们还有空间认为应该在两条线路上使用相同的名称;鉴于脚本的其余部分,Example_HOME应该是CENTRASITE_HOME,尽管两个名称都被广泛使用。


该行:

cd $WORKDIR

就在Unix之前没有意义(在DOS批处理命令文件中不在Windows上,但这不是DOS批处理命令文件)。除非您使用cd或(在Bash中). filename.sh,否则脚本中的source filename.sh操作不会影响调用脚本的父进程。