首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取符号链接调用的KornShell脚本的` `dirname $0`

问获取符号链接调用的KornShell脚本的` `dirname $0`
EN

Stack Overflow用户
提问于 2012-01-25 19:50:42
回答 2查看 7.5K关注 0票数 3

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

代码语言:javascript
复制
link.sh
dist/MyApp-3.0.0/script.sh
dist/MyApp-3.0.0/lib/*.jar

link.sh是指向KornShell (ksh)脚本script.sh的符号链接。在shell脚本中,我想使用以下命令调用Java程序:

代码语言:javascript
复制
java -cp lib/*

当我尝试从符号链接启动应用程序时,我得到ClassNotFound,因为相对路径是从链接基础目录解析出来的(这是正常的)。

在shell脚本中,如何获取脚本的完整路径(<...>/dist/MyApp-3.0.0/)?它将允许我修改我的Java调用:

代码语言:javascript
复制
java -cp ${SCRIPT_DIR}/lib/*
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-25 20:01:30

编辑:使用readlink

您可以使用readlink,它可以归结为:

代码语言:javascript
复制
SCRIPT_DIR=$(dirname "$(readlink -f $0)")

编辑:不使用readlink

代码语言:javascript
复制
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)

我误解了脚本的位置,并假设被调用的脚本的目录位于目标应用程序的目录结构中,其中可以使用以下内容:

代码语言:javascript
复制
SCRIPT_DIR=$(cd $(dirname $0); /bin/pwd)
票数 3
EN

Stack Overflow用户

发布于 2012-01-25 20:56:53

您必须使用readlink函数(man readlink)

my2c

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9002220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档