cd -
이전 디렉토리로 이동하는 명령을 사용하게 되어 기쁩니다 . 동시에 나는 또한 좋아 pushd .
합니다 popd
.
그러나 현재 작업 디렉토리를 기억하여 이 작업을 수행하려는 경우 pushd .
이전 디렉토리로 이동하면 가능성을 잃게 됩니다 cd -
. ( pushd .
또한 실행됨 cd .
).
pushd
아직도 어떻게 사용할 수 있나요?cd -
참고: GNU bash, 버전 4.1.7(1)
답변1
다음과 같이 사용할 수 있습니다.
push() {
if [ "$1" = . ]; then
old=$OLDPWD
current=$PWD
builtin pushd .
cd "$old"
cd "$current"
else
builtin pushd "$1"
fi
}
이름을 지정하면 pushd
함수가 내장보다 먼저 평가되므로 내장보다 우선합니다.
덮어쓰면 특별한 의미를 잃게 되므로 old
변수 가 필요합니다 .current
OLDPWD
답변2
조금 더 간단한 버전보이텍의 답변:
pushd () {
if [ "$1" = . ]; then
cd -
builtin pushd -
else
builtin pushd "$1"
fi
}
함수에 이름을 붙이면 함수명을 기억하지 않아도 pushd
정상적으로 사용할 수 있습니다 .pushd
답변3
케빈의 대답은 매우 좋습니다. 사람들이 문제를 해결하기 위해 스크립트가 필요한 이유를 더 잘 이해하고 싶어하는 경우를 대비하여 무슨 일이 일어나고 있는지에 대한 몇 가지 세부 정보를 작성했습니다.
CD와 디렉터리 스택이 작동하는 방식을 더 자세히 살펴보면 pushd .
동작이 중단된 이유가 분명해집니다. cd -
일부 디렉터리를 스택에 푸시해 보겠습니다.
$ mkdir dir1 dir2 dir3
$ pushd dir1
~/dir1 ~
$ pushd../dir2
~/dir2 ~/dir1 ~
$ pushd../dir3
~/dir3 ~/dir2 ~/dir1 ~
$ dirs -v
0 ~/dir3
1 ~/dir2
2 ~/dir1
3 ~
cd -
이제 디렉터리로 다시 점프해 볼 수 있습니다 .
$ cd -
/home/username/dir2
$ dirs -v
0 ~/dir2
1 ~/dir2
2 ~/dir1
3 ~
cd -
이전 디렉터리로 다시 점프하여 스택 ~0을 점프한 디렉터리로 대체한 것을 볼 수 있습니다 . 다시 되돌아갈 수 있습니다 cd -
:
$ cd -
/home/username/dir3
$ dirs -v
0 ~/dir3
1 ~/dir2
2 ~/dir1
3 ~
이전 디렉터리가 실제로 디렉터리 스택에 나열되어 있지 않더라도 이전 디렉터리로 다시 이동합니다. 이는 이전 디렉터리를 추적하는 데 cd
환경 변수가 사용되기 때문입니다 .$OLDPWD
$ echo $OLDPWD
/home/username/dir2
이렇게 하면 pushd .
현재 디렉터리의 추가 복사본을 스택에 푸시합니다.
$ pushd .
~/dir3 ~/dir3 ~/dir2 ~/dir1 ~
$ dirs -v
0 ~/dir3
1 ~/dir3
2 ~/dir2
3 ~/dir1
4 ~
스택에 있는 현재 디렉터리의 추가 복사본을 만드는 것 외에도 pushd .
다음이 업데이트되었습니다 $OLDPWD
.
$echo $OLDPWD
/home/username/dir3
따라서 cd -
유용한 기록이 손실되었으며 이제는 아무 작업도 수행하지 않고 현재 디렉터리로 이동합니다.