答案 0 :(得分:140)
对于相对路径(即Windows'%~dp0
的直接等价物):
MY_PATH="`dirname \"$0\"`"
echo "$MY_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"
答案 1 :(得分:20)
假设您输入了bash脚本的完整路径,请使用$0
和dirname
,例如:
#!/bin/bash
echo "$0"
dirname "$0"
示例输出:
$ /a/b/c/myScript.bash
/a/b/c/myScript.bash
/a/b/c
如有必要,请将$PWD
变量的结果附加到相对路径。
编辑:添加引号来处理空格字符。
答案 2 :(得分:8)
由c.u.s.上的 Stephane CHAZELAS 供稿 假设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 '%s\n' "$prg"
答案 3 :(得分:4)
echo Running from `dirname $0`
答案 4 :(得分:2)
弗拉德的代码被过度引用。应该是:
MY_PATH=`dirname "$0"`
MY_PATH=`( cd "$MY_PATH" && pwd )`