Determine the path of the executing BASH script

Possible Duplicate:
Can a Bash script tell what directory it's stored in?

In a Windows command script, one can determine the directory path of the currently executing script using %~dp0 . For example:

@echo Running from %~dp0

What would be the equivalent in a BASH script?


For the relative path (ie the direct equivalent of Windows' %~dp0 ):

MY_PATH="`dirname "$0"`"
echo "$MY_PATH"

For the absolute, normalized path:

MY_PATH="`dirname "$0"`"              # relative
MY_PATH="`( cd "$MY_PATH" && pwd )`"  # absolutized and normalized
if [ -z "$MY_PATH" ] ; then
  # error; for some reason, the path is not accessible
  # to the script (e.g. permissions re-evaled after suid)
  exit 1  # fail
fi
echo "$MY_PATH"

Assuming you type in the full path to the bash script, use $0 and dirname , eg:

#!/bin/bash
echo "$0"
dirname "$0"

Example output:

$ /a/b/c/myScript.bash
/a/b/c/myScript.bash
/a/b/c

If necessary, append the results of the $PWD variable to a relative path.

EDIT: Added quotation marks to handle space characters.


Stephane CHAZELAS贡献cus假设POSIX shell:

prg=$0
if [ ! -e "$prg" ]; then
  case $prg in
    (*/*) exit 1;;
    (*) prg=$(command -v -- "$prg") || exit;;
  esac
fi
dir=$(
  cd -P -- "$(dirname -- "$prg")" && pwd -P
) || exit
prg=$dir/$(basename -- "$prg") || exit 

printf '%sn' "$prg"
链接地址: http://www.djcxy.com/p/9746.html

上一篇: 获取shell脚本目录的父目录

下一篇: 确定正在执行的BASH脚本的路径