CD에 대한 더 많은 역사가 있나요?

CD에 대한 더 많은 역사가 있나요?

cd -마지막으로 방문한 디렉토리로 이동할 수 있습니다. 지난 역사 외에 더 많은 역사를 방문할 수 있나요?

답변1

어떤 쉘을 사용하고 있는지 지정하지 않았으므로 이를 zsh 승격을 위한 핑계로 사용하십시오.

예 , 우리는 더 많은 역사를 갖고 있습니다 cd. 특히 완성 시스템과 색상이 활성화된 경우 매우 편리합니다 .cd -2cd -4cd -TAB

이것이 .zshrc에 있는 것입니다:

setopt AUTO_PUSHD                  # pushes the old directory onto the stack
setopt PUSHD_MINUS                 # exchange the meanings of '+' and '-'
setopt CDABLE_VARS                 # expand the expression (allows 'cd -2/tmp')
autoload -U compinit && compinit   # load + start completion
zstyle ':completion:*:directory-stack' list-colors '=(#b) #([0-9]#)*( *)==95=38;5;12'

결과:

여기에 이미지 설명을 입력하세요.

답변2

찾고 있는 명령은 pushd및 입니다 popd.

볼 수 있는 실제 작업 pushd사례popd여기.

mkdir /tmp/dir1
mkdir /tmp/dir2
mkdir /tmp/dir3
mkdir /tmp/dir4

cd /tmp/dir1
pushd .

cd /tmp/dir2
pushd .

cd /tmp/dir3
pushd .

cd /tmp/dir4
pushd .

dirs
/tmp/dir4 /tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1

답변3

"추가 기록"에 대한 질문에 답변합니다. 아니요, cd -Bash의 기능은 "뒤집기"할 수 있는 단일 디렉터리만 지원합니다. @Ramesh가 그의 답변에서 말했듯이. 더 긴 디렉토리 기록을 원할 경우 pushd및를 사용하여 popd디렉토리를 저장하거나 이전 디렉토리로 돌아갈 수 있습니다.

또한 이 명령을 사용하여 현재 스택에 있는 항목의 목록을 볼 수도 있습니다 dirs.

자세한 설명은 다음 제목에서 확인할 수 있습니다.Pushd 및 Popd 명령을 사용하는 방법은 무엇입니까?.

답변4

원하는 만큼 많은 기록을 가질 수 있습니다.

cd() {
[ "$((${DIRSTACKMAX##*[!0-9]*}0/10))" -gt 0 ] &&
        set -- "$@" "$DIRSTACK"               &&
        DIRSTACK='pwd -P >&3; command cd'     ||
        { command cd "$@"; return; }
_q()    while   case "$1" in (*\'*) :   ;;      (*)
                ! DIRSTACK="$DIRSTACK '$2$1'"   ;;esac
        do      set -- "${1#*\'}" "$2${1%%\'*}'\''"
        done
while   [ "$#" -gt 1 ]
do      case    ${1:---} in (-|[!-]*|-*[!0-9]*) : ;;
        (*)     eval "  set $((${1#-}+1))"' "${'"$#}\""
                eval '  set -- "$2"'" $2"'
                        set -- "${'"$1"'}" "$1"'
        ;;esac; _q "$1"; shift
done
eval "  DIRSTACK=; $DIRSTACK    &&"'
        _q "$OLDPWD"            &&
        DIRSTACK=$DIRSTACK\ $1
        set "$?" "${DIRSTACK:=$1}"'" $1
"       3>/dev/null
[ "$(($#-1))" -gt "$DIRSTACKMAX" ] &&
        DIRSTACK="${DIRSTACK% \'/*}"
unset -f _q; return "$1"
}

zsh이는 POSIX 호환 쉘이 -style 히스토리를 제공할 수 있도록 하는 쉘 함수입니다 cd. 단일 하위 쉘을 호출하지 않고 모든 작업을 수행하며 그 흐름이 매우 합리적이라고 생각합니다. 적당한 테스트에서는 모든 경우를 올바르게 처리하는 것 같습니다.

이 함수는 완전히 이식 가능한 구문에 의존하면서 환경에서 최대한 잘 작동하려고 시도합니다. 단지 $DIRSTACK환경 ​​변수가 마음대로 사용할 수 있는 속성이라고 가정할 뿐입니다.

이는 저장하는 모든 경로를 정규화 $DIRSTACK하고 작은따옴표로 묶은 모든 경로를 직렬화합니다. 하지만 각 경로를 변수 값에 추가하기 전에 안전하게 인용하고 직렬화하도록 보장하고 특수 문자가 포함된 모든 종류의 문제에 대해 사용해서는 안 됩니다. 환경 변수가 설정 되면 $DIRSTACKMAX이를 기록에 보관되는 경로 수의 상한으로 사용하고, 그렇지 않으면 제한은 1입니다.

함수를 로드하면 정상적으로 되지만 디렉터리 기록을 변경하여 돌아갈 cd수도 있습니다 .cd -[num]

이 함수의 주요 메커니즘은 cd그 자체와 ${OLD,}PWD환경 변수입니다. POSIX는 cd각 경로 이동에 대해 이러한 값을 변경하도록 지정하므로 이는 쉘의 내장 변수를 사용하고 필요에 따라 값을 저장합니다.

관련 정보