如何获取正在执行的 sh 文件的真实路径

如何获取正在执行的 sh 文件的真实路径

我把这行添加到我的~/.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

我在 Linux 的 Windows 子系统下。

答案1

只需使用BASH_SOURCE而不是$0

realpath ${BASH_SOURCE}

在你的脚本中:

REAL=$(realpath ${BASH_SOURCE})

答案2

当你来源Bash 脚本$0不会保存源脚本的名称,而是保存 Bash 可执行文件的名称。

您应该读取的值$BASH_SOURCE,这样脚本目录的绝对路径将是

SCRIPT_DIR="$(realpath "$(dirname "$BASH_SOURCE")")"

有关的:在 $0 和 BASH_SOURCE 之间进行选择 (Stack Overflow)

相关内容