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 X 10.9와 Zsh를 사용하고 있습니다. .

Answer

전체 경로 문자열을 입력하지 않고 절대 경로로 현재 디렉토리에 링크하는 가장 쉬운 방법은 다음과 같습니다.

ln -s "$(pwd)/foo" ~/bin/foo_link 

ln -s에 대한 target (첫 번째) 인수 명령은 현재 디렉토리가 아니라 심볼릭 링크의 위치를 기준으로 작동합니다. 기본적으로 creat ed symlink (두 번째 인수)는 첫 번째 인수로 제공하는 텍스트 를 포함합니다.

따라서 다음을 수행하면 :

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 '이게 문자 그대로의 진실이 아닌가?
  • 그렇습니다. 상상 을 " know " 또는 " 이해합니다 ".
  • 아마도 다시 혼란 스러웠을 것입니다. " target "에서 " 소스 . source_file (첫 번째) 인수는 링크가 가리키는 위치이며, 이는 명령에 입력하는 것과 동일합니다. target_file (두 번째) 인수는 입력 한 내용이 디렉토리가 아닌 경우 링크의 이름이됩니다.이 경우 링크 이름은 그러나 target_file 디렉토리에 있습니다.
  • Y̶o̶u̶ ' ̶r̶e̶ ̶r̶i̶g̶h̶t̶, ̶ ̶t̶h̶e̶r̶e̶ , 대답은 ̶F̶i̶x̶i̶n̶g̶.̶ 없음 ̶s̶o̶o̶n̶e̶r̶.̶ 잡힐 T
    IT하셨습니까 어떻게 미친 했소의 실수는 S

    이었다 권리. ln 맨 페이지에서 target는 첫 번째 인수 (링크가 to 를 가리킴)이고 두 번째 인수는 간단히 link라고합니다 (source는 언급되지 않음).
  • Linux (gnu ln)에서는 맨 페이지는 첫 번째 인수 target와 두 번째 link ( man7.org/ linux / man-pages / man1 / ln.1.html ). 그러나 BSD (OS X 포함)에서 첫 번째는 source이고 두 번째는 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 

댓글

  • 아니요. ' 트릭을하지 않습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다