シンボリックリンクを介してBashスクリプトを実行すると、Bashスクリプトのパスをどのように取得できますか? [コピー]

シンボリックリンクを介してBashスクリプトを実行すると、Bashスクリプトのパスをどのように取得できますか? [コピー]

Bashスクリプトがシンボリックリンクを介して実行されたときにパスを取得したいと思います。

この場合、$0isはシンボリックリンクへのパスです-bashBASH_SOURCE

一部のシェル変数、組み込みシェルコマンド、または外部コマンドを介してスクリプトパスを取得できますか?

BASH_SOURCEスクリプトが複数レベルの間接参照(複数のシンボリックリンク)を介して実行されていても、初期シンボリックリンクへのパスは常に保存されますか?

lswithを使用BASH_SOURCEして常にスクリプトパスを取得できますか?

ベストアンサー1

realpathあるいは、readlink -fGNU coreutilsで役に立ちます。

$ ls -l foo.sh bar.sh whereami.sh
lrwxrwxrwx 1 ilkkachu ilkkachu  6 Jul 31 19:01 bar.sh -> foo.sh*
lrwxrwxrwx 1 ilkkachu ilkkachu 11 Jul 31 19:01 foo.sh -> whereami.sh*
-rwxr-xr-x 1 ilkkachu ilkkachu 36 Jul 31 19:02 whereami.sh*
$ cat whereami.sh
#!/bin/bash
echo "$BASH_SOURCE"
realpath "$BASH_SOURCE"
$ ./bar.sh
./bar.sh
/tmp/whereami.sh

おすすめ記事