cd -
마지막으로 방문한 디렉토리로 이동할 수 있습니다. 지난 역사 외에 더 많은 역사를 방문할 수 있나요?
답변1
어떤 쉘을 사용하고 있는지 지정하지 않았으므로 이를 zsh 승격을 위한 핑계로 사용하십시오.
예 , 우리는 더 많은 역사를 갖고 있습니다 cd
. 특히 완성 시스템과 색상이 활성화된 경우 매우 편리합니다 .cd -2
cd -4
cd -
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
각 경로 이동에 대해 이러한 값을 변경하도록 지정하므로 이는 쉘의 내장 변수를 사용하고 필요에 따라 값을 저장합니다.