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"
上一篇: 获取shell脚本目录的父目录
下一篇: 确定正在执行的BASH脚本的路径
