如何在Linux上使用Push和Popd

时间:2020-01-09 10:45:08  来源:igfitidea点击:

许多Linux人士从未听说过pushdpopd,但是他们已经永远存在了。它们还可以极大地加快在命令行上浏览目录的过程。我们将指导我们如何使用它们。

什么被推动和弹出?

比尔·乔伊(Bill Joy)在其1978C Shell中所采用的一项创新就是目录堆栈的概念以及操纵它的方法:pushd和popd。模仿是最恭维的奉承形式,目录堆栈,pushd和popd很快被合并到其他shell(如Bash)甚至其他操作系统中。

堆栈的概念很简单。将项目一次放置在堆栈上,最后添加的项目始终占据最高位置。从堆栈中检索项目时,会按从上到下的顺序将其删除。具有这种性质的堆栈通常称为后进先出(LIFO)队列。

实际上," pushd"和" popd"比这要灵活一些,但这是目前牢记的一个好模型。

当我们指的是目录堆栈时,pushd和popd中的d代表目录可能就不足为奇了。这些命令允许我们将目录推送到目录堆栈上或者从目录堆栈中弹出。

但是,这对我们有何好处?

推送方式如何填充堆栈

使用pushd时,会发生以下三件事:

  • 我们可以像使用cd一样更改目录。

  • 目录的名称和路径将添加到堆栈中。

  • 堆栈显示为以空格分隔的目录列表。

在以下示例中,请注意目录堆栈如何随每个新的" pushd"命令一起增长。还要注意,堆栈的顶部在左侧,这是新条目出现的位置。

在执行第一个" pushd"命令之后,堆栈中有两个条目:我们离开的目录和我们移至的目录。

对于我们的示例,我们键入以下内容:

pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~

最后一个pushd命令将我们带回到主目录,因此堆栈中的第一个和最后一个条目是代字号(~~),它代表我们的主目录。这表明,尽管目录已经在堆栈中,但将为其他" pushd"命令再次添加该目录。

还请注意,堆栈中最左边的条目(即最近添加的条目)是当前目录。

dirs命令

我们可以使用" dirs"命令,如下所示,显示目录堆栈:

dirs

它不影响堆栈,仅显示它。可以与pushd一起使用的某些选项是指目录在堆栈中的位置。

如果要查看每个目录的数字位置,可以使用-v(垂直)选项,如下所示:

目录-v

如果我们希望看到主目录的拼写路径而不是波浪号(~),则添加-l(长格式)选项,如下所示:

dirs -v -l

将目录添加到堆栈

如我们所见,当我们使用pushd命令时,它会执行三件事:更改目录,将新目录添加到堆栈中,并为我们显示堆栈。我们可以使用-n(不旋转)选项将目录添加到堆栈中,而无需更改当前目录。

这是我们的目录堆栈:

dirs -v -l

现在,我们将使用带有-n选项的pushd命令和/ home / dave目录中的pas作为参数。然后,我们将再次检查目录堆栈。

我们输入以下内容:

pushd -n /home/dave
dirs -v -l

/ home / dave目录已添加到堆栈中插槽1中的第二个位置。它不能占据最高位置,因为插槽零始终是当前目录。

我们没有离开当前目录,即~/ Videos,因此它不会旋转到堆栈中的另一个位置。

通过旋转堆栈更改目录

我们可以将数字参数与pushd一起使用,以移动到堆栈中的任何目录,并且这样做时堆栈会旋转。然后,我们选择移动的目录将成为堆栈中的第一个条目。

我们通过位置编号引用堆栈中的目录。我们可以从堆栈的顶部或者底部进行计数。对于正数(例如+3),请从顶部算起;对于负数(例如-2),请从底部开始计数。

/ home / dave / Documents目录位于第三位置。我们可以使用以下命令移动该目录:

pushd +3

我们选择的目录上方的堆栈中的目录将移至堆栈的底部。现在,我们选择的目录占据了最高位置,我们被移入了该目录。

如果要更改到堆栈底部的目录,可以使用以下命令:

pushd -0

最后一个目录移动到第一个插槽,所有其他目录在堆栈中向下移动。我们更改为~/ Pictures目录。

popd命令

我们可以使用" popd"命令从堆栈中删除目录。

如果看目录堆栈,我们可以看到位置1的目录是/ home / dave。要从堆栈中删除它,我们键入以下内容将数字传递给popd

dirs -v -l
popd +1

/ home / dave目录已被删除,堆栈中位于其下方的目录都向上移动了一个位置。

就像使用push一样,我们可以使用popd从堆栈的底部开始计数。要从堆栈中删除最后一个目录,我们输入:

popd -0

~/ Music目录从堆栈中的最后一个位置删除。

要更改目录,请执行某些操作,然后跳回到上一个目录,可以同时使用pushdpopd

我们将使用pushd移到另一个目录。我们将使用popd丢弃堆栈中最顶层的目录,然后移至第二个目录。这是我们刚刚移出的目录,因此我们又回到了原来所在的目录中。

我们输入以下内容:

pushd ~
popd

我们从~~ Projects目录开始,将其推到主目录,然后将popd返回到~/ Projects目录。

旋转整个堆栈

我们将说明如何在带有一些嵌套目录的堆栈中旋转,但是我们可以在文件系统中的任何位置使用任何目录。

我们最深层的嵌套是:

/home/dave/Projects/htg/articles

从主目录开始,我们将逐步下降到每个目录,直到到达商品目录。然后,我们来看目录堆栈。

我们输入以下内容:

pushd ~/Projects
pushd htg
pushd articles
dirs -v -l

当我们反复发出" pushd +1"命令时,我们可以在目录堆栈中循环切换。如果我们经常这样做,则"推+1"将是别名的理想选择。

输入以下内容:

pushd +1