确定正在执行的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,使用$0
和dirname
,例如:
#!/bin/bash echo "$0" dirname "$0"
示例输出:
$ /a/b/c/myScript.bash /a/b/c/myScript.bash /a/b/c
如有必要,请将$PWD
variables的结果附加到相对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 )`