たくさんのシンボリックリンクを作成しようとしていますが、これが機能している理由がわかりません
ln -s /Users/niels/something/foo ~/bin/foo_link
この間
cd /Users/niels/something
ln -s foo ~/bin/foo_link
ではありません。
foo_link
ではなく/Users/niels/bin
のfooへの/Users/niels/something
リンクに関係していると思います
だから問題は、実際に入力せずに絶対パスを指すシンボリックリンクを作成するにはどうすればよいですか?
参考までに、Mac OS X 10.9とZshを使用しています。
パス文字列全体を入力せずに、絶対パスとして現在のディレクトリにリンクする最も簡単な方法は、
_ln -s "$(pwd)/foo" ~/bin/foo_link
_
_ln -s
_コマンドのtarget
(最初の)引数は、現在のディレクトリではなく、シンボリックリンクの場所に相対的に機能します。基本的に、作成されたシンボリックリンク(2番目の引数)は、最初の引数に指定したtextを保持するだけであることを理解するのに役立ちます。
したがって、次の操作を行った場合:
_cd some_directory
ln -s foo foo_link
_
そして、そのリンクを移動します
_mv foo_link ../some_other_directory
ls -l ../some_other_directory
_
_foo_link
_ triesが存在するディレクトリのfoo
を指すことがわかります。これは、相対パスを指すシンボリックリンクでも機能します。次の場合:
_ln -s ../foo yet_another_link
_
次に_yet_another_link
_を別のディレクトリに移動し、それが指している場所を確認すると、常に_../foo
_を指していることがわかります。シンボリックリンクは、さまざまな絶対パスに存在できるディレクトリ構造の一部であることが多いため、これは意図された動作です。
あなたの場合、入力してリンクを作成すると
_ln -s foo ~/bin/foo_link
_
_foo_link
_は、その場所を基準としたfoo
へのリンクを保持します。 $(pwd)
をターゲット引数の名前の前に置くと、現在の作業ディレクトリの絶対パスが追加されるだけなので、リンクは絶対ターゲットで作成されます。
-r
(--relative
)フラグを使用すると、これが機能します。
ln -sr foo ~/bin/foo_link
入力を節約するために、次のことができます
ln -s "$PWD"/foo ~/bin/foo_link
どうですか:
$ cd /Users/niels/something
$ ln -s ./foo ~/bin/foo_link