一連のシンボリックリンクを作成しようとしていますが、これが機能している理由がわかりません。
ln -s /Users/niels/something/foo ~/bin/foo_link
これは
cd /Users/niels/something ln -s foo ~/bin/foo_link
ではありません。
/Users/niels/something
ではなく/Users/niels/bin
のfooにリンクするfoo_link
と関係があると思います。
問題は、実際に入力せずに絶対パスを指すシンボリックリンクを作成するにはどうすればよいですか?
参考までに、Mac OS X10.9とZshを使用しています。 。
回答
パス文字列全体を入力せずに、絶対パスとして現在のディレクトリにリンクする最も簡単な方法は次のとおりです。
ln -s "$(pwd)/foo" ~/bin/foo_link
ln -s
のtarget
(最初の)引数コマンドは、現在のディレクトリではなく、シンボリックリンクの場所に関連して機能します。基本的に、作成者であることを知るのに役立ちます。 ed symlink(2番目の引数)は、最初の引数に指定した text を保持するだけです。
したがって、次の場合:
cd some_directory ln -s foo foo_link
次にそのリンクを移動します
mv foo_link ../some_other_directory ls -l ../some_other_directory
foo_link
は、それが存在するディレクトリ内の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
コメント
-
-r
はGNUism、つまり非POSIXであるため、OPの場合は標準のOS Xとして機能しないことに注意してください' div id = “8dceb49c5b”>
コマンドはBSDベースです。
回答
一部を保存するには入力すると、次のことができます。
ln -s "$PWD"/foo ~/bin/foo_link
コメント
- @Freddy、シェルによって異なります。 fishまたはzshでは、問題ありません。bashを含み、デフォルト値が$ IFSのBourneのようなシェルでは、SPCが実際に問題になりますが、TAB、NL、およびすべてのグロブ文字(少なくとも
*
、?
および[...]
)。 - @St é phaneChazelasはい。 '正解で、質問には
bash
のタグが付けられているため、'は一般的に 引用することをお勧めします。 悪いことに、もっと具体的にすべきだった。
回答
どうですか:
$ cd /Users/niels/something $ ln -s ./foo ~/bin/foo_link
コメント
- いいえ、'はうまくいきません。
source_file
(最初の)引数は、リンクが指す場所です。これは、コマンドに入力した内容と同じです。target_file
(2番目の)引数は、入力するものがディレクトリでない限り、リンクの名前になります。ディレクトリの場合、リンク名はですが、ディレクトリtarget_file
に配置されています。 ' S AのミスにTHE̶a̶n̶s̶w̶e̶r̶.̶クレイジーどのようにそれdidnの'のT GETキャッチ̶s̶o̶o̶n̶e̶r̶.̶̶F̶i̶x̶i̶n̶g̶.̶いいえ、答えはでした正しい。ln
のマンページでは、target
が最初の引数(リンクがを指す)であるのに対し、2番目の引数は単にlink
と呼ばれます(source
は言及されていません)。target
と2番目のlink
( man7.org/ linux / man-pages / man1 / ln.1.html )。しかし、BSD(OS Xを含む)では、最初はsource
と呼ばれ、2番目はtarget
( freebsd.org/cgi/man.cgi?ln )。かなり紛らわしいです。