我有一个文件夹组织,如下所示:
link.sh
dist/MyApp-3.0.0/script.sh
dist/MyApp-3.0.0/lib/*.jar
link.sh
是KornShell(ksh)脚本script.sh
的符号链接。在shell脚本中,我想用以下命令调用Java程序:
java -cp lib/*
当我尝试从符号链接启动应用程序时,我得到ClassNotFound
,因为相对路径是从链接基础目录解析的(这是正常的)。
在shell脚本中,如何获取脚本的完整路径(<...>/dist/MyApp-3.0.0/
)?它允许我修改我的Java调用:
java -cp ${SCRIPT_DIR}/lib/*
答案 0 :(得分:3)
修改:使用readlink
您可以使用readlink,它归结为:
SCRIPT_DIR=$(dirname "$(readlink -f $0)")
编辑:没有readlink
if test -h $0; then
symdir=$(dirname "$(ls -l $0 | sed -n 's/.*-> //p')")
if [[ -z $symdir ]]; then
symdir=.
fi
fullreldir=$(dirname $0)/$symdir
fi
script_dir=$(cd $fullreldir; /bin/pwd)
我误解了脚本的位置,并假设正在调用的脚本目录位于目标应用程序的目录结构中,以下内容将起作用:
SCRIPT_DIR=$(cd $(dirname $0); /bin/pwd)
答案 1 :(得分:0)
你必须使用readlink函数(man readlink)
MY2C