相対パス名を使用してソフトリンクを作成する方法はありますか? (基本パスに相対的または絶対パスではない)

相対パス名を使用してソフトリンクを作成する方法はありますか? (基本パスに相対的または絶対パスではない)

pwdを基準にしてみましたが、うまくいきません。

現在のパスワードは、宛先パスと元のパス(リンクを生成する必要があるパス)とは異なります。

ホームディレクトリがわからないため、ホームディレクトリに関連付けられているパス名は使用できません。絶対パス名は必要ありません。

相対パス名を使用してソフトリンクを作成するには?

答え1

相対シンボリックリンクは親ディレクトリに相対的であり、プロセスの現在のディレクトリやユーザーのホームディレクトリとは関係ありません。

たとえば、行へ/some/dir/linkのシンボリックリンクの場合、現在またはホームディレクトリが何であるかに関係なく(それ自体がシンボリックリンクではない場合)への../foo/barシンボリックリンクです。/some/dir/../foo/bar/some/foo/bar/some/dir

bin/ls現在のディレクトリに関連付けられているファイル(現在のディレクトリ内のファイルなど/home/stephane)への新しいシンボリックリンクを作成するには、次のようにします(POSIXに似たシェルまたはからfish)。

ln -s -- "$PWD/bin/ls" /some/dir/link

これにより(への)絶対シンボリックリンクが生成されます/home/stephane/bin/ls。相対シンボリックリンクを作成するには、次のものが必要です。

ln -s ../../home/stephane/bin/ls /some/dir/link

(それ自体/some/some/dirシンボリックリンクではないと仮定)

GNUには、このパスを計算するのに役立つオプションがlnあります-r

ln -rs bin/ls /some/dir/link

(これを行うと同じシンボリックリンクが生成されます../../home/stephane/bin/ls)。

答え2

シンボリックリンクに相対パスを使用できます

bbたとえば、現在の作業ディレクトリに相対的にある../../bbフォルダから次のフォルダに移動したいとします。mylink

ln -s ../../bb/ mylink

$ ls -lsa mylink
0 lrwxrwxrwx 1 user user 9 Apr 18 15:51 mylink -> ../../bb/

関連フォルダにmylinkがある別の例pwd

mkdir ../../tst
$ ln -s ../../bb/ ../../tst/mylink
$ ls -lsa ../../tst/mylink
0 lrwxrwxrwx 1 user user 9 Apr 18 16:08 ../../tst/mylink -> ../../bb/

関連情報