Posts in category dirname

Linux shell 获得当前脚本文件所在的目录

这基本上是一个非常常见的需求,不过考虑到兼容性: 1)目录或者文件名中空格;2)对通过link的形式引用;3)通过. ./test.sh这样的方式调用,要做出一个比较完美的方案也不是那么容易。

首先看看主流的做法:

另外一个来源:

  • http://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-bash-script-find-what-directory-itsstoredin/
    #!/bin/bash
    # Name: /tmp/demo.bash : 
    # Purpose: Tell in what directory $0 is stored in
    # Warning: Not tested for portability 
    # ------------------------------------------------
     
    ## who am i? ##
    _script="$(readlink -f ${BASH_SOURCE[0]})"
     
    ## Delete last component from $_script ##
    _base="$(dirname $_script)"
     
    ## Okay, print it ##
    echo "Script name : $_script"
    echo "Current working dir : $PWD"
    echo "Script location path (dir) : $_base"
    
  • 这个脚本只支持 bash,经测试,对空格的支持存在问题。

考虑实际情况(总是在 bash 下面),对上面脚本修改一下,我最终使用的方案是:

#!/bin/bash

if [ -z $BASH ]; then
    echo "This shell script MUST run under bash."
    exit /b -1
fi
_script="$(readlink -f "${BASH_SOURCE[0]}")"
_script_dir="$(dirname "$_script")"
echo "Directory portion of $_script : $_script_dir"