シンボリックリンクとハードリンクの問題

シンボリックリンクとハードリンクの問題

/A/B/c.sh が /X/Y/c.sh にシンボリックリンクされているとします。

  • c.sh に「./SOMETHING」コマンドがある場合、「.」は /A/B/ または /X/Y/? を意味します。
  • ハードリンクはどうですか?

答え1

.どちらの場合も、これは実際には現在の作業ディレクトリであり、スクリプトが保存されているディレクトリとは何の関係もありません。

[/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

答え2

私はマイケルのコメントに同意します。しかし重要なのは$0パラメータです。

$0名前を調べて、使用されているシンボル名に応じてさまざまな操作を実行するスクリプトを見たことがあります。

答え3

この例の表現は.現在直接的に機能します。リンクされたパスは関係ありません。リンクの種類に関係なく、実行や編集のためにファイルを参照することは、リンクが複数ある場合でも基本的に同じです。違いそれらの間。

答え4

これはあなたが要求したものではありませんが、あなたが探しているものかもしれません...

これを使用して、"$0"基本スクリプトと同じディレクトリにあるサブスクリプトを見つけることができます。

MYPATH="$(realpath "$0")"
MYDIR="$(dirname "$MYPATH")"
"$MYDIR/otherscript" ...

デフォルトのスクリプトはシンボリックリンクされているため、最初に使用する必要が$0ありますrealpath。引数にディレクトリ部分がない場合は返されますが、dirnameこの場合、引数は絶対パスに変換されました。.realpath

関連情報