3.16 在命令行中用pushd和popd快速定位

当在终端或shell提示符下涉及多处位置时,我们通常所做的就是复制并粘贴路径。有鼠标,复制并粘贴这招才管用。当没有GUI(图形用户界面),只能通过命令行进行访问的时候,就很难处理涉及在多路径之间跳转的操作。举例来说,假如我们同时涉及/var/www、/home/slynux和 /usr/src,当要在这些位置之间进行切换时,每次都要通过键盘输入路径,这实在是一件很麻烦的事。此时,我们就可以使用诸如pushdpopd这种基于命令行接口(CLI)的定位技术。让我们来看看它们的使用方法。

3.16.1 预备知识

pushdpopd可以用于在多个目录之间进行切换而无需复制并粘贴目录路径。pushdpopd是以栈的方式来运作。我们都知道栈是一个后进先出(Last In First Out,LIFO)的数据结构。目录路径被存储在栈中,然后用pushpop操作在目录之间进行切换。

3.16.2 实战演练

使用pushdpopd的时候,就可以无视cd命令了。

为了压入并切换路径,使用:

  1. ~ $ pushd /var/www

现在,栈中包含了 /var/www ~,当前目录切换到 /var/www。

然后,再压入下一个目录路径:

  1. /var/www $ pushd /usr/src

现在栈包含 /usr/src /var/www ~,当前目录为 /usr/src。

你可以按照上面的方法,根据需要压入任意多的目录路径。

用下面的命令查看栈内容:

  1. $ dirs
  2. /usr/src /var/www ~ /usr/share /etc
  3. 0 1 2 3 4

当你想切换到列表中任意一个路径时,将每条路径从0到n进行编号,然后使用你希望切换到的路径编号,例如:

  1. $ pushd +3

这条命令会将栈进行翻转并切换到目录 /use/share。

pushd总是将路径添加到栈,如果要从栈中删除路径,可以使用popd

移除最近压入栈的路径并切换到下一个目录:

  1. $ 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个以上的目录时,可以使用pushdpopd。但是当你只涉及两个位置的时候,还有另一个更简便的方法:cd -

如果当前路径是 /var/www,执行下面的命令:

  1. /var/www $ cd /usr/src
  2. /usr/src $ # 做点什么

现在要切换回 /var/www,你不需要再输入一次,只需要执行:

  1. /usr/src $ cd -

你还可以再切换到 /usr/src:

  1. /var/www $ cd -