pwd에 상대적인 경로를 가진 ln -s


26

많은 심볼릭 링크를 만들려고하는데 왜 이것이 작동하는지 알 수 없습니다

ln -s /Users/niels/something/foo ~/bin/foo_link

이 동안

cd /Users/niels/something
ln -s foo ~/bin/foo_link

아니다.

나는 그것이 대신 foo_linkfoo에 연결하는 것과 관련이 있다고 생각합니다./Users/niels/bin/Users/niels/something

문제는 실제로 입력하지 않고 절대 경로를 가리키는 심볼릭 링크를 어떻게 만듭니 까?

참고로 Mac OS X 10.9 및 Zsh를 사용하고 있습니다.

답변:


33

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

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

명령 의 target(첫 번째) 인수는 ln -s현재 디렉토리가 아닌 기호 링크의 위치와 관련하여 작동합니다. 본질적으로 작성된 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_linkfoo위치와 관련된 링크 만 보유합니다 . $(pwd)대상 인수의 이름 앞에 놓으면 단순히 현재 작업 디렉토리의 절대 경로가 추가되어 링크가 절대 대상으로 작성됩니다.


"... 생성 된 심볼릭 링크가 단순히 텍스트를 보유하고 있다고 상상 하는 데 도움이 됩니다." 이것이 문자적인 진실이 아닙니까?
와일드 카드

1
그것은. 아마도 " 상상 "또는 "이해"로 상상할 수 있습니다 .
Achilleas

아마도 나는 혼란스러워했다. "target"이라고 말하는 곳은 "source"를 의미합니다. source_file(첫 번째) 인수는 그대로 명령에 입력 한 내용 인 경우 링크 점이다. target_file무엇을 입력하면 링크 이름의베이스 이름과 동일 할 경우에 디렉토리가 아닌 (두 번째) 인수는 링크의 이름이됩니다 source_file만 디렉토리에가 target_file.
Charlie Gorichanaz

멋져요 오른쪽 ̶ 놈의 실수에서 했소 미친 어떻게 않았나 얻을 잡은 ̶s̶o̶o̶n̶e̶r̶.̶ ̶F̶i̶x̶i̶n̶g̶.̶ 아니, 대답은 옳았다. 에 의해 ln맨, target(링크가 가리키는 첫 번째 인자 인 으로 두 번째 인수는 반면에) 단순히라고 link( source언급되지 않고).
Achilleas

3
리눅스 (gnu ln)에서 man 페이지는 첫 번째 인수 target와 두 번째 인수 link( man7.org/linux/man-pages/man1/ln.1.html )를 호출합니다 . 그러나 BSD (OS X 포함)에서는 첫 번째가 호출 source되고 두 번째 target( freebsd.org/cgi/man.cgi?ln ) 가 호출 됩니다. 상당히 혼란 스럽습니다.
cristoper

5

은 Using -r( --relative) 플래그는이 일을 할 것입니다 :

ln -sr foo ~/bin/foo_link

4
그주의 -rGNUism, 즉 비 POSIX 그래서 것이다 표준 OS X 용으로 영업 이익의 경우하지 작업 ln명령은 BSD 기반으로합니다.
jlliagre

2

타이핑을 저장하려면 할 수 있습니다

ln -s "$PWD"/foo ~/bin/foo_link

@ 프레디, 그것은 껍질에 달려 있습니다. 생선이나 zsh에서는 괜찮을 것입니다. Bourne 씨는 같은 배쉬와 $ IFS의 기본 값을 포함 쉘, SPC는 사실도 TAB, NL 모든 글 로빙 문자 (적어도 문제가 될 것이나,에서 *, ?그리고 [...]).
Stéphane Chazelas

@ StéphaneChazelas 네, 맞습니다. 질문에 태그가 지정되어 bash있으므로 일반적으로 인용하는 것이 좋습니다. 나의 나쁜, 나는 더 구체적이어야했다.
프레디

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.