众所周知,cd
如果没有参数,则将当前目录更改为其主目录。我想知道在使用这样的命令后是否有任何方法cd
可以返回到运行之前所在的目录位置cd
?
概括地说,在使用 -ed 到另一个目录后,是否有任何方法可以返回到上一个目录cd
?这两个问题的答案似乎很可能是相同的,但以防万一,我将它们分开,因为第一个问题是我想要回答的主要问题。
答案1
是的:
cd -
或者
cd "$OLDPWD"
(如果目录名称不包含空格或通配符,则可以省略引号。)
它们适用于所有 POSIX 风格的 shell(bash、ksh、zsh 等)。cd -
也适用于 tcsh 和 Fish。
答案2
我经常使用pushd
和popd
来避免这个问题。
例子
$ pwd
/home/saml/tst/134317
$ ls -l
total 12
drwxrwxr-x. 2 saml saml 4096 Jun 3 16:05 dir1
drwxrwxr-x. 2 saml saml 4096 Jun 3 16:05 dir2
drwxrwxr-x. 2 saml saml 4096 Jun 3 16:05 dir3
现在我们去吧dir1
。
$ pushd dir1
~/tst/134317/dir1 ~/tst/134317
$ pwd
/home/saml/tst/134317/dir1
并dir2
:
$ pushd ../dir2/
~/tst/134317/dir2 ~/tst/134317/dir1 ~/tst/134317
$ pwd
/home/saml/tst/134317/dir2
现在回到我们刚刚来的地方:
$ popd
~/tst/134317/dir1 ~/tst/134317
$ pwd
/home/saml/tst/134317/dir1
您可以使用以下命令查看堆栈上有哪些目录dirs
:
$ dirs
~/tst/134317/dir1 ~/tst/134317
您当前所在的目录是最左边的目录。
~/tst/134317/dir1
我们将“弹出”到的目录是右侧旁边的目录。
~/tst/134317
当您添加目录时,它会继续“推送”左侧的目录,并从左侧“弹出”它们。
答案3
使用 bash,“cd -”的替代方案可以是 Pushd/popd,它允许使用目录堆栈:
cd <path1> => move to <path1>
pushd <path2> => move to <path2>
pushd <path3> => move to <path3>
...
popd => return to <path2>
popd => return to <path1>