可能重复:
Bash脚本可以告诉它存储在哪个目录中吗?
在Windows命令脚本中,可以使用确定当前正在执行的脚本的目录路径%~dp0.例如:
@echo Running from %~dp0
Run Code Online (Sandbox Code Playgroud)
什么是BASH脚本中的等价物?
vla*_*adr 151
对于相对路径(即直接等效的Windows' %~dp0):
MY_PATH="`dirname \"$0\"`"
echo "$MY_PATH"
Run Code Online (Sandbox Code Playgroud)
对于绝对的规范化路径:
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"
Run Code Online (Sandbox Code Playgroud)
Ale*_*lds 22
假设您键入bash脚本的完整路径,请使用$0和dirname,例如:
#!/bin/bash
echo "$0"
dirname "$0"
Run Code Online (Sandbox Code Playgroud)
示例输出:
$ /a/b/c/myScript.bash
/a/b/c/myScript.bash
/a/b/c
Run Code Online (Sandbox Code Playgroud)
如有必要,将$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"
Run Code Online (Sandbox Code Playgroud)