現在の作業ディレクトリのファイルを指すシンボリックリンクを作成したいと思います。
次のトップレベルツリーがあるとしましょう。
.
├── dir1
│ └── hello.so
└── dir2
2 directories, 1 file
作業ディレクトリをに変更しました。今のシンボリックリンクをdir1
作成したいと思います。hello.so
dir2
一度試してみましょうln -s ./hello.so ../dir2/
。ただし、./hello.so
意図したとおりに拡張されず、リンクが生成されるため、機能しません。./
ln -s ${PWD}/hello.so ../dir2/
うまくいきますが、少し冗長です。
拡張プログラムが何なのか誤解したのではないか心配になりますが./
、どこが間違っているか把握できませんでした。
これが私の環境に関連する問題であれば、Bash 5.0.2を使用しています。ln
この人からはどんな素敵な兆候も見つかりませんでした。
ベストアンサー1
./
拡張ではなく、文字通りの相対パスです。.
現在のディレクトリで呼び出されたエントリを見つけ、それをディレクトリ(/
)として扱い、hello.so
そこで探し続けます。
各ディレクトリには.
自分自身を指すエントリがあります。各ディレクトリには、..
親ディレクトリ(ルートディレクトリを除く)を指すエントリもあります。これは特に特別ではありません。自動的に作成されることを除いて、通常のファイルやディレクトリと同様に、通常のディレクトリエントリです。
シンボリックリンクは言葉その中に文字列値を保存し、ln -s
何もせずにユーザーが提供した値を正確に保存します。これがあなたが見るものです:./hello.so
あなたが指示したように正確にリンクを入れることです。
リンクにフルパスを含めるには、自分で作成するか、直接作成してフルパス$PWD
を$(pwd)
提供する必要があります。
ただし、パスは場所に基づいて解釈されるため、以下はファイルへの有効なリンクです。
ln -s ../dir1/hello.so dir2/hello.so
あるいは、リンクしたい場所への他のパスは../dir1/hello.so
すべて同じ方法でリンクに保存されます。
この場合、リンクにアクセスすると、リンクの場所に基づいて検索が実行され、ファイルが検索../dir1/hello.so
されます。ディレクトリツリー全体が移動される場合、これは強力ですが、絶対パスはありません。達成する目標に応じて、これらのいずれかがあなたに適したオプションになることがあります。