为了账号安全,请及时绑定邮箱和手机立即绑定

请教下如果不用绝对路径的情况下,这种问题怎么解决呢?

请教下如果不用绝对路径的情况下,这种问题怎么解决呢?

慕容708150 2023-04-16 13:09:40
我在开发一个bash的脚本工具,需要用到相对目录。问题是脚本是放在 /usr/local/bin 加入PATH里的,这样我可以在任何地方直接运行,但悲催的是运行过程中,这个相对目录就出问题了。例如:/usr/local/bin/cmd.sh#!/bin/bashmkdir ../tmp/imgs这个命令我本意是在 mkdir /usr/local/tmp/imgs但如果我在家目录运行~ # sudo cmd.sh他实际上是去创建 /home/tmp/imgs 的不用绝对路径的情况下,这种问题怎么解决呢?因为这个工具是有多个脚本和配置组成的,用绝对路径会有很麻烦的问题。
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

如果需要处理软链接的情况,可是使用如下函数

_current_path() {
    SOURCE=${BASH_SOURCE[0]}    DIR=$( dirname "$SOURCE" )    while [ -h "$SOURCE" ]    do
        SOURCE=$(readlink "$SOURCE")
        [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
        DIR=$( cd -P "$( dirname "$SOURCE"  )" && pwd )
    done    DIR=$( cd -P "$( dirname "$SOURCE" )" && pwd )    echo $DIR}

调用

cd $(_current_path)


查看完整回答
反对 回复 2023-04-20
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

如果仅仅是到脚本所在的目录,下面的就可以:

cd $(dirname $0)

dirname $0是获取脚本所在的目录。

如果要获取执行脚本所在目录的绝对路径,可以用下面的方法:

CUR_DIR=$(cd `dirname $0` && pwd -P)

pwd -P可以获取当前目录的绝对路径,并且如果当前目录只是一个软链接,它所显示得是链接目标的绝对路径。


查看完整回答
反对 回复 2023-04-20
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信