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脚本的路径