3.16 在命令行中用pushd和popd快速定位
当在终端或shell提示符下涉及多处位置时,我们通常所做的就是复制并粘贴路径。有鼠标,复制并粘贴这招才管用。当没有GUI(图形用户界面),只能通过命令行进行访问的时候,就很难处理涉及在多路径之间跳转的操作。举例来说,假如我们同时涉及/var/www、/home/slynux和 /usr/src,当要在这些位置之间进行切换时,每次都要通过键盘输入路径,这实在是一件很麻烦的事。此时,我们就可以使用诸如pushd
和popd
这种基于命令行接口(CLI)的定位技术。让我们来看看它们的使用方法。
3.16.1 预备知识
pushd
和popd
可以用于在多个目录之间进行切换而无需复制并粘贴目录路径。pushd
和popd
是以栈的方式来运作。我们都知道栈是一个后进先出(Last In First Out,LIFO)的数据结构。目录路径被存储在栈中,然后用push
和pop
操作在目录之间进行切换。
3.16.2 实战演练
使用pushd
和popd
的时候,就可以无视cd
命令了。
为了压入并切换路径,使用:
- ~ $ pushd /var/www
现在,栈中包含了 /var/www ~,当前目录切换到 /var/www。
然后,再压入下一个目录路径:
/var/www $ pushd /usr/src
现在栈包含 /usr/src /var/www ~,当前目录为 /usr/src。
你可以按照上面的方法,根据需要压入任意多的目录路径。
用下面的命令查看栈内容:
- $ dirs
- /usr/src /var/www ~ /usr/share /etc
- 0 1 2 3 4
当你想切换到列表中任意一个路径时,将每条路径从0到n进行编号,然后使用你希望切换到的路径编号,例如:
- $ pushd +3
这条命令会将栈进行翻转并切换到目录 /use/share。
pushd
总是将路径添加到栈,如果要从栈中删除路径,可以使用popd
。
移除最近压入栈的路径并切换到下一个目录:
- $ popd
假设现在栈包含 /usr/src /var/www ~ /usr/share /etc,当前目录是 /usr/share,popd
会将栈更改为 /var/www ~ /usr/share /etc,并且把目录切换到/var/www。
用popd +no
可以从列表中移除特定的路径。
在这里,no
是从左到右,从0到n开始计数的。
3.16.3 补充内容
让我们再看一些基本的目录定位练习。
在常用的目录之间切换
当涉及3个以上的目录时,可以使用pushd
和popd
。但是当你只涉及两个位置的时候,还有另一个更简便的方法:cd -
。
如果当前路径是 /var/www,执行下面的命令:
- /var/www $ cd /usr/src
- /usr/src $ # 做点什么
现在要切换回 /var/www,你不需要再输入一次,只需要执行:
- /usr/src $ cd -
你还可以再切换到 /usr/src:
- /var/www $ cd -