내가 다음을 수행한다고 가정해 보겠습니다.
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더 좋은 정보를 위해.