pwdに相対的なパスを持つln-s

一連のシンボリックリンクを作成しようとしていますが、これが機能している理由がわかりません。

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 -starget(最初の)引数コマンドは、現在のディレクトリではなく、シンボリックリンクの場所に関連して機能します。基本的に、作成者であることを知るのに役立ちます。 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)を置くと、現在の作業ディレクトリが追加されます。絶対パス。リンクは絶対ターゲットで作成されます。

コメント

  • " …作成されたシンボリックリンクが単にテキストを保持していることを想像するのに役立ちます…. " Isn 'これは文字通りの真実ですか?
  • そうです。おそらく、 imagine を" know "または"理解"。
  • おそらく私は(再び)混乱しました。 " target "とは" source 。 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は言及されていません)。
  • linux(gnu ln)ではマニュアルページでは、最初の引数targetと2番目のlink man7.org/ linux / man-pages / man1 / ln.1.html )。しかし、BSD(OS Xを含む)では、最初はsourceと呼ばれ、2番目はtarget freebsd.org/cgi/man.cgi?ln )。かなり紛らわしいです。

回答

-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 

コメント

  • いいえ、'はうまくいきません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です