我有一个如下所示的文件夹组织:
link.sh
dist/MyApp-3.0.0/script.sh
dist/MyApp-3.0.0/lib/*.jar
link.sh
是指向 KornShell (ksh) 脚本的符号链接(symbolic link) script.sh
.在 shell 脚本中,我想使用以下命令调用 Java 程序:
java -cp lib/*
当我尝试从符号链接(symbolic link)启动应用程序时,我得到 ClassNotFound
因为相对路径是从链接基目录解析的(这是正常的)。
在 shell 脚本中,如何获取脚本的完整路径 ( <...>/dist/MyApp-3.0.0/
)?它将允许我修改我的 Java 调用:
java -cp ${SCRIPT_DIR}/lib/*
最佳答案
编辑:使用readlink
您可以使用 readlink,归结为:
SCRIPT_DIR=$(dirname "$(readlink -f $0)")
编辑:没有阅读链接
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)
关于shell - 获取由符号链接(symbolic link)调用的 KornShell 脚本的 `dirname $0`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9002220/