对于相对路径(即直接等效的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"
在大多数情况下,$ 0就可以了,例如,当你执行的脚本是别名时(通过.bash_profile中的别名),有些例外.你应该使用$ BASH_SOURCE变量,而不是$ 0. (4认同)
当我通过符号链接执行脚本时,对我不起作用.是否有一个变体可以确定完全解析的脚本目录?编辑:`$(dirname $(readlink $ 0))`似乎工作 (4认同)
使用`source script`或`运行脚本时,使用`$ 0`不起作用.script`; 脚本的名称不可用. (2认同)
Alex Reynold.. 22
假设您键入bash脚本的完整路径,请使用$0
和dirname
,例如:
#!/bin/bash echo "$0" dirname "$0"
示例输出:
$ /a/b/c/myScript.bash /a/b/c/myScript.bash /a/b/c
如有必要,将$PWD
变量的结果附加到相对路径.
编辑:添加引号来处理空格字符.
对于相对路径(即直接等效的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"
假设您键入bash脚本的完整路径,请使用$0
和dirname
,例如:
#!/bin/bash echo "$0" dirname "$0"
示例输出:
$ /a/b/c/myScript.bash /a/b/c/myScript.bash /a/b/c
如有必要,将$PWD
变量的结果附加到相对路径.
编辑:添加引号来处理空格字符.
由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"