現在のディレクトリへの絶対シンボリックリンクを作成する


12

私は今、非常に長いパスを持つディレクトリの下にいます。将来より早くアクセスするために、リンクを作成したいと思います。

私は試した

ln -s . ~/mylink

~/mylink実際にリンクし~ます。だから、私~は絶対パス名に展開してからそれを与えることができlnますか?

回答:


19

シンボリックリンクは、実際に指定したパスを文字列¹として保存します¹。つまり、リンク~/mylinkに「.」(1文字)が含まれることを意味します。リンクにアクセスすると、そのパスは、リンクを作成したときの場所ではなく、リンクの場所に関連して解釈されます。

代わりに、必要な実際のパスをリンクに保存できます。

ln -s "$(pwd)" ~/mylink

コマンド置換を使用してpwd(作業ディレクトリ名)の出力をコマンドラインに配置します。ln完全なパスを確認してシンボリックリンクに保存すると、適切な場所が示されます。

¹ 多かれ少なかれ。


2
参照してください"$PWD"POSIXシェルでと~0してzsh
ステファンシャゼル14

7

以下を使用する必要があります。

ln -s "$(cd . && pwd)" ~/mylink

または:

ln -s "$(pwd -P)" ~/mylink

現在の作業ディレクトリの正しい結果を取得します。この質問のように、作業中に変更できます。


1
最初のシェルはすべてのシェルで必ずしも役立つとは限りません(この回答を参照)。OP $PWD$(pwd -P)(現在のディレクトリへの正規のパス)ではなく、(そこに到達するために使用したパス)を使用する可能性があります。$PWDもはや現在のディレクトリを指していない場合$(pwd -P)、次の分でそれが言うこともありません。
ステファンシャゼル14


@StéphaneChazelas:"$PWD"現在のディレクトリが移動しても、古い値が残っていることがわかります。ユーザーまたはシェルによって初期化されたPWDときにのみ設定されますcd
クオンルム14

しかし、私が言っていることはOPがいくつかのシェル(は、ksh93、灰、ヤシュ)での現在の作業ディレクトリにいくつかの絶対パスよりも古いの$ PWDを希望する可能性が高いとしていることであるということである、などの説明があっ呼び出すcdようにするには保証されません$ PWDまたはpwdの出力。現在のディレクトリへのパス。あなたは起こりそうにない何かに対してガードしようとしていますが、最初の解決策では必ずしも効果的ではなく、2番目の解決策では振る舞いを変えています。
ステファンシャゼラス14

1
あなたがやったmv 後に誰かがやったln場合、あなたは同じ状況になります。一方、彼がそうした場合、リンクが他の場所を指している場合にリンクが間違った場所を指しているcd /long/logical/path/to/some/directoryので、リンクが指すこと/vg0/lv1/user2/app4(正規のパス)は望ましくありませ/long/logical/path/to/some/directoryん。
ステファンシャゼル14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.