如何获取源文件的真实路径
我在~/.bashrc
添加了这一行
. /mnt/c/Users/enzo/drive/projects/dotfiles/init.sh
并且在init.sh内部我试图获取init.sh
的路径,但我无法做到。
到目前为止我试过这个:
CURDIR=`/bin/pwd` BASEDIR=$(dirname $0) ABSPATH=$(readlink -f $0) ABSDIR=$(dirname $ABSPATH) REAL=$(realpath $0) echo "CURDIR is $CURDIR" echo "BASEDIR is $BASEDIR" echo "ABSPATH is $ABSPATH" echo "ABSDIR is $ABSDIR" echo "REAL is $REAL"
输出:
CURDIR is /mnt/c/Users/enzo BASEDIR is /bin ABSPATH is /bin/bash ABSDIR is /bin REAL is /bin/bash
我在windows子系统下用于linux。
只需使用BASH_SOURCE
而不是$0
:
realpath ${BASH_SOURCE}
在你的脚本中:
REAL=$(realpath ${BASH_SOURCE})
当您获取Bash脚本时, $0
将不包含源脚本的名称,而是保存Bash可执行文件的名称。
您应该改为读取$BASH_SOURCE
的值,以便脚本目录的绝对路径为
SCRIPT_DIR="$(realpath "$(dirname "$BASH_SOURCE")")"
相关: 在$ 0和BASH_SOURCE之间选择(Stack Overflow)