web-dev-qa-db-ja.com

ソースされている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サブシステムの下にいます。

3
EnZo

BASH_SOURCEの代わりに$0を使用するだけです:

realpath ${BASH_SOURCE}

あなたのスクリプトで:

REAL=$(realpath ${BASH_SOURCE})
6
Ravexina

Bashスクリプトをsourceすると、$0はソーススクリプトの名前ではなく、Bash実行可能ファイルの名前を保持します。

代わりに$BASH_SOURCEの値を読み取る必要があります。これにより、スクリプトのディレクトリへの絶対パスが

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

関連: $ 0とBASH_SOURCE(スタックオーバーフロー)の選択

6
Byte Commander