/A/B/c.shが/X/Y/c.shにシンボリックリンクされているとしましょう。
.
は、どちらの場合も実際には現在の作業ディレクトリです。スクリプトを保持しているディレクトリとは何の関係もありません。
[/tmp] $ echo "realpath ." > test.sh && chmod +x test.sh
[/tmp] $ /tmp/test.sh
/tmp
[/tmp] $ cd /usr/bin
[/usr/bin] $ /tmp/test.sh
/usr/bin
Michaelに同意しますが、問題になる可能性のある場所の1つは$0
パラメーターです。
$0
の名前を調査し、使用されている記号名に基づいてさまざまなことを行うスクリプトを見てきました。
.
この場合、現在直接作業していることを意味します。リンクのパスは関係ありません。実行または編集のためにファイルを参照することは、リンクのタイプに関係なく、それらの間にいくつかの differences がある場合でも、基本的に同じです。
これはあなたが尋ねたものではありませんが、あなたが探しているものかもしれません...
メインスクリプトと同じディレクトリにあるサブスクリプトを見つける方法として、"$0"
を使用できます。
MYPATH="$(realpath "$0")"
MYDIR="$(dirname "$MYPATH")"
"$MYDIR/otherscript" ...
メインスクリプトはシンボリックリンクされているため、最初にrealpath
を使用して$0
を逆参照する必要があります。引数にディレクトリ部分がない場合、dirname
は.
を返しますが、この例では、realpath
はすでに引数を絶対パスに変換しています。