Maison  >  Questions et réponses  >  le corps du texte

linux - bash脚本使用相对目录的问题

我在开发一个bash的脚本工具,需要用到相对目录。问题是脚本是放在 /usr/local/bin 加入PATH里的,这样我可以在任何地方直接运行,但悲催的是运行过程中,这个相对目录就出问题了。
例如:
/usr/local/bin/cmd.sh

#!/bin/bash
mkdir ../tmp/imgs

这个命令我本意是在 mkdir /usr/local/tmp/imgs
但如果我在家目录运行

~ # sudo cmd.sh

他实际上是去创建 /home/tmp/imgs 的
不用绝对路径的情况下,这种问题怎么解决呢?
因为这个工具是有多个脚本和配置组成的,用绝对路径会有很麻烦的问题。

ringa_leeringa_lee2742 Il y a quelques jours772

répondre à tous(5)je répondrai

  • PHP中文网

    PHP中文网2017-04-17 11:10:13

    #!/bin/bash
    cd `dirname $0`
    pwd

    répondre
    0
  • 高洛峰

    高洛峰2017-04-17 11:10:13

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

    _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)

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 11:10:13

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

    cd $(dirname $0)

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

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

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

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

    répondre
    0
  • 阿神

    阿神2017-04-17 11:10:13

    开始的位置

    cd /usr/local/bin/

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-17 11:10:13

    不考虑软链接,直接用:

    DIR=$(dirname `pwd`/$0)

    便可以获得脚本所在目录的绝对路径,然后用

    $DIR/../tmp/xxx

    就可以进行相对路径跳转了

    répondre
    0
  • Annulerrépondre