如何获取源文件的真实路径

我在~/.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)