"cd"를 사용하여 심볼릭 링크 디렉터리로 이동합니다. 현재 작업 디렉터리가 전체 경로가 되기를 바랍니다.

"cd"를 사용하여 심볼릭 링크 디렉터리로 이동합니다. 현재 작업 디렉터리가 전체 경로가 되기를 바랍니다.

내 홈 디렉토리에 ~게시했습니다.

ln -s Subfolder1/Subfolder2/Subfolder3

Subfolder3그런 다음 홈 디렉토리에 소프트 링크 폴더가 있습니다. 내가 pushd거기에 들어가면 둘 다 내 현재 작업 디렉토리를 pwd보여줍니다 (dirs서부 독일) 이 되다. 내 bash 프롬프트에도 포함되어 있습니다/home/My.User.Name/Subfolder3서부 독일,로 표시됩니다 ~/Subfolder3.

나는 수년 전에 심볼릭 링크된 폴더를 사용 cd하거나 pushd입력한 후 , 및 를 통해 bash 프롬프트에 전체 경로가 표시된다는 것을 기억합니다 ~/Subfolder1/Subfolder2/Subfolder3. 간단한 설정으로 이 동작을 복원할 수 있습니까?pwddirs

답변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.

이는 기본값이 아니기 때문에매우디렉터리 재귀 및 ..의미 체계와 같은 항목을 난독화합니다. (이것은 보안 취약점으로 간주될 수도 있다고 생각합니다.)

이것이 실제로 대화형 세션에 가장 적합한 구성인지 신중하게 고려해야 합니다. (내 경험상 그렇다.~인 것 같다그것은...당신이 그것을 시도하기 전까지는 그렇습니다. )

관련 정보