내가 일부 파일을 편집하고 있다고 가정해 보겠습니다. 터미널과 GUI 파일 관리자가 열려 있습니다. 저는 현재 /my/very/long/and/winding/directory/path
터미널에 있습니다. 내 GUI에서
/my/very/long/and/winding/directory
삭제하고 터미널로 돌아가서 cd ..
디렉토리가 더 이상 존재하지 않기 때문에 오류가 발생합니다. 별거 아니야. 내가 cd /my/very/long/and/winding
원하는 위치로 다시 입력할 수 있습니다. 하지만 입력하기가 너무 게으른 경우 아직 존재하는 가장 최근 디렉토리로 돌아갈 수 있는 좋은 방법이 있습니까?
편집: cd ../../
이 특별한 경우에는 해결책이 있습니다. 하지만 좀 더 일반적인 대답이 있는지 궁금하고, 몇 걸음 뒤로 물러나야 할지 모르겠습니다.
답변1
링크가 아닌 디렉터리 경로를 기반으로 디렉터리의 한 수준을 반환하려면 다음을 수행하세요 ..
.
cd $PWD:h
또는 이식 가능한 방법:
cd "${PWD%/*}"
(따옴표는 zsh에서는 선택 사항입니다. 다른 쉘에서는 디렉토리 이름에 공백이 포함되어 있지 않거나 \[*?
)
디렉터리 계층 구조를 더 위로 이동하려면 필요한 만큼 :h
반복 합니다./*
또는 해당 값을 입력 cd $PWD
한 다음 Tab확장을 누르고 $PWD
결과를 수동으로 편집합니다. (완성 및 줄 편집기 설정에 따라 /
바인딩된 키(기본값) 또는 또는 (기본값 + )를 누르기 전에 접미사를 추가해야 할 수도 있습니다 .)$PWD
Tabexpand-or-complete
Tabexpand-or-complete-prefix
expand-word
CtrlX *
답변2
가정이 PWD
맞다면 다음과 같이 ZShell을 종료할 수 있습니다.
% cd ~/tmp
% mkdir -p a/a/a/a/a/a/a/a/a/a/a
% cd !$
cd a/a/a/a/a/a/a/a/a/a/a
% rm -rf ~/tmp/a
% undir
% pwd
/Users/jmates/tmp
%
사용자 정의 undir
함수 실행은 경로 체인 루프를 종료합니다.
function undir {
local dir
dir=$PWD:h
while [[ $dir != / ]]; do
builtin cd -q $dir 2>/dev/null
if [[ $? -eq 0 ]]; then
dir=/
else
dir=$dir:h
fi
done
}
이 명령은 셸에서 유지 관리하는 변수와 다른 결과를 pwd
제공하므로 이에 의존할 수 없습니다 .PWD
% mkdir -p a/a/a/a/a/a/a/a/a/a
% cd !$
cd a/a/a/a/a/a/a/a/a/a
% rm -rf ~/tmp/a
% pwd
/Users/jmates/tmp/a/a/a/a/a/a/a/a/a/a
% cd ..
% pwd
.
% echo $PWD
/Users/jmates/tmp/a/a/a/a/a/a/a/a/a
%
그렇지 않다면 zsh
의심할 여지 없이 다른 솔루션이 필요할 것입니다.
답변3
현재 디렉토리를 삭제하면 현재 디렉토리가 이름 없이 존재하고 나머지 세계와 연결되어 있지 않기 때문에 cd ..가 작동하지 않습니다. 그래서..더 이상 존재하지 않습니다.
모든 bourne 쉘은 $PWD의 복사본을 생성하고 경로를 탐색하는 함수 작성을 허용해야 합니다(아직 존재하는 한).