确定正在执行的BASH脚本的path

可能重复:
Bash脚本可以告诉它存储在哪个目录中?

在Windows命令脚本中,可以使用%~dp0来确定当前正在执行的脚本的目录path。 例如:

 @echo Running from %~dp0 

BASH脚本中的等价物是什么?

对于相对path(即Windows' %~dp0的直接等价物):

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

对于绝对的,标准化的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 (eg permissions re-evaled after suid) exit 1 # fail fi echo "$MY_PATH" 

假设你inputbash脚本的完整path,使用$0dirname ,例如:

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

示例输出:

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

如有必要,请将$PWDvariables的结果附加到相对path。

编辑:添加引号来处理空格字符。

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 '%s\n' "$prg" 
 echo Running from `dirname $0` 

弗拉德的代码是过分报价的。 应该:

 MY_PATH=`dirname "$0"` MY_PATH=`( cd "$MY_PATH" && pwd )`