심볼릭 링크 해결(pwd)

심볼릭 링크 해결(pwd)

내가 다음을 수행한다고 가정해 보겠습니다.

cd /some/path
ln -s /target/path symbolic_name

그렇게 하는 경우:

cd /some/path
cd symbolic_name
pwd

나는 얻다:

/some/path/symblic_name

아니다:

/target/path

내가 직접 수행한 것처럼 쉘이 심볼릭 링크(예: CWD 업데이트 등)를 "완전히 해결"하도록 하는 방법이 있습니까?

cd /target/path

?

나는 내가 목표 경로에 어떻게 도달했는지를 "알고" 있거나 "민감하게" 보이는 일부 프로그램을 실행해야 하며, 그들이 내가 목표 경로에 도달한 것을 마치 cd /target/path직접 수행된 것처럼 생각하기를 원합니다.

답변1

pwd귀하의 쉘에는 "스마트"해지려고 하는 기능이 내장되어 있습니다 . 심볼릭 링크에 대한 작업을 수행한 후 출력은 마치 실제 디렉터리로 이동한 것처럼 cd내부적으로 가짜입니다.pwd

옵션을 -P에 전달합니다 pwd(예: run ) pwd -P. 이 -P옵션("물리적")은 pwd기호 링크 추적을 수행하지 않고 디렉터리에 대한 "실제" 경로를 표시하도록 지시합니다.

pwd또는 이 마법을 수행하지 않는(또는 수행할 수 없는) 실제 바이너리도 있어야 합니다 . 바이너리를 명시적으로 사용하세요.

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a

답변2

노력하다 cd -P <symlink_dirname>.

tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b

tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b

tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a

또한 set -o physical실행 중인 셸의 수명 동안 이 동작이 지속되도록 할 수도 있습니다.

확인하다https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links더 좋은 정보를 위해.

관련 정보