获取由符号链接调用的KornShell脚本的“dirname $ 0”

时间:2012-01-25 11:50:42

标签: shell unix ksh symlink

我有一个文件夹组织,如下所示:

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/*

2 个答案:

答案 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