내 홈 디렉토리에 ~
게시했습니다.
ln -s Subfolder1/Subfolder2/Subfolder3
Subfolder3
그런 다음 홈 디렉토리에 소프트 링크 폴더가 있습니다. 내가 pushd
거기에 들어가면 둘 다 내 현재 작업 디렉토리를 pwd
보여줍니다 (dirs
서부 독일) 이 되다. 내 bash 프롬프트에도 포함되어 있습니다/home/My.User.Name/Subfolder3
서부 독일,로 표시됩니다 ~/Subfolder3
.
나는 수년 전에 심볼릭 링크된 폴더를 사용 cd
하거나 pushd
입력한 후 , 및 를 통해 bash 프롬프트에 전체 경로가 표시된다는 것을 기억합니다 ~/Subfolder1/Subfolder2/Subfolder3
. 간단한 설정으로 이 동작을 복원할 수 있습니까?pwd
dirs
답변1
문서( man bash
, 검색상징적인cd
) 는 및를 사용할 때 마다 pushd
또는 전역 옵션을 설정하여 이를 처리할 수 있음을 보여줍니다.
cd -P path/through/symlink
pushd -P path
set -P
이 전역 옵션은 bash
모든 곳에서 실제 경로를 사용하도록 전환됩니다.
답변2
대안으로페더의 답변, 현재 작업 디렉토리에 대한 일회성 역참조를 위해 사용할 수 있습니다 pwd -P
. 불행히도 에서는 작동하지 않습니다 dirs
.
장기적인 솔루션을 위해 쉘 기능을 정의할 수 있습니다.
cd() {
command cd "$@" && command cd "$(pwd -P)"
}
(이것을 .bashrc
파일에 넣으세요.) 이렇게 하면 cd
함수가 내장 명령을 실행하고 cd
, 성공하면 절대 경로 이름을 가져와서 cd
실행합니다.저것. 이렇게 하면 $PWD
경로가 설정되고 쉘 프롬프트에 표시됩니다.
드문 경우지만 두 번째 작업이 command cd
실패할 수도 있습니다. 이 경우 원하는 디렉토리에 계속 있어야 cd
하지만 심볼릭 링크 이름은 계속 표시됩니다(그리고 cd
함수가 성공하더라도 cd
(처음) 오류 메시지를 표시할 수 있습니다.) 아마도 두 번째 사람이 cd
당신을 데려갈 수도 있습니다.나가당신이 들어가고 싶은 디렉토리. 그러나 이런 일이 일어날 수 있는 시나리오는 생각나지 않습니다.
답변3
일회성 역참조를 위해 권장되는 realpath
유틸리티도 있습니다.
[ferd ~]$ cd /var/tmp/
[ferd tmp]$ ln -s /home/ferd/Videos MyVideos
[ferd tmp]$ cd MyVideos
[ferd MyVideos]$ pwd
/var/tmp/MyVideos
[ferd MyVideos]$ realpath .
/home/ferd/Videos
디렉토리를 자동으로 realpath
설정하는 것은 일반적으로 zsh의 셸 옵션입니다 CHASE_LINKS
.
이는 기본값이 아니기 때문에매우디렉터리 재귀 및 ..
의미 체계와 같은 항목을 난독화합니다. (이것은 보안 취약점으로 간주될 수도 있다고 생각합니다.)
이것이 실제로 대화형 세션에 가장 적합한 구성인지 신중하게 고려해야 합니다. (내 경험상 그렇다.~인 것 같다그것은...당신이 그것을 시도하기 전까지는 그렇습니다. )