Bash脚本获取自身路径方法

| Comments

恢复博客的更新^-^

Shell中有一个命令叫pwd可以获得当前工作目录。如果脚本在脚本 所在目录下执行,使用pwd命令可以得到脚本的当前目录。

1
2
3
# /home/user/scripts/getmydir.sh
MYDIR=`pwd`
echo $MYDIR

在/home/user/scripts目录下执行./getmydir.sh得到脚本所在的绝对路径。

但如果该脚本在其他目录下执行,比如在/home/user下执行scripts/getmydir.sh 得到的路径却是/home/user/


可以看出pwd命令获取脚本自身路径有一定限制。我们可以用以下方法在任意目录 执行该脚本获取其绝对路径:

1
2
   # /home/user/scripts/getmydir2.sh
    MYDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

将以上这条长命令分解来看就是:

1
2
3
4
DIR1="{BASH_SOURCE[0]}"   #脚本相对于当前目录的路径,是相对路径
DIR2="$( dirname $DIR1 )"   #得到脚本的目录名,也是相对路径
#cd命令切换到脚本所在目录,再执行pwd命令得到脚本绝对路径
MYDIR="$( cd $DIR2 && pwd )" 

该脚本能成功的关键是BASH_SOURCE环境变量。当用.source执行脚本时, BASH_SOURCE变量会自动设置到源文件路径。


还有一种方法是使用readlink命令达到效果。

1
2
DIR1="`dirname $BASH_SOURCE`"
MYDIR=`readlink -f "$DIR1"`

Comments