在本系列的第三部分中,我们通过讨论cd-命令的用法,重点介绍了Linux中的命令行导航。还讨论了其他一些相关的要点/概念。现在继续前进,在本文中,我们将讨论如何使用pushd和popd命令在Linux命令行上获得更快的导航体验。在我们开始之前,值得说明的是,下文中提到的所有说明和命令都已经在Ubuntu14.04和Bashshell(4.3.11)上进行了测试。pushd和popd命令基础知识为了更好地理解pushd和popd命令的作用,让我们首先讨论堆栈的概念。想象一下,您的厨房砧板上有一块空白区域,您想要在上面放一组盘子。你会怎么做?很简单,把一个放在另一个上面。所以在这个过程的最后,案板上的第一个盘子是盘子里的最后一个盘子,你手里的最后一个盘子是这叠盘子里的第一个盘子。现在,当你需要一个盘子时,你可以选择最上面的一个并使用它,然后在需要时选择下一个。pushd和popd命令是相似的概念。在Linux系统上有一个目录堆栈,您可以在其中堆栈目录路径以供将来使用。您可以使用dirs命令快速查看任意时间点的堆栈内容。以下示例显示了在命令行终端启动后立即在我的系统上使用dirs命令的输出:$dirs~输出中的波浪号(~)表示目录堆栈当前仅包含用户的主目录。继续使用pushd和popd命令存储目录路径并将其删除。使用pushd非常简单-只需将要存储在目录堆栈中的路径作为参数传递给此命令即可。这是一个示例:pushd/home/himanshu/Downloads/上面的命令所做的是,将当前工作目录更改为您作为参数传递的目录,并将路径添加到目录堆栈。为了方便用户,pushd命令在其输出中生成目录堆栈的内容。因此,当运行上述命令时,会产生以下输出:~/Downloads~输出显示堆栈中现在有两个目录路径:一个用于用户的主目录,一个用于用户的下载目录。它们按以下顺序保存:底部的主目录,上面是新添加的下载目录。要验证pushd的输出是否正确,也可以使用dirs命令:$dirs~/Downloads~所以可以看到dirs命令也有同样的输出。让我们再次使用pushd命令:$pushd/usr/lib/;pushd/home/himanshu/Desktop//usr/lib~/Downloads~~/Desktop/usr/lib~/Downloads~所以目录栈现在总共包含四个目录路径,主目录(~)在底部,用户的桌面目录在顶部。请记住堆栈的头部是您当前的目录。这意味着我们当前的工作目录现在是~/Desktop。现在,假设你想回到/usr/lib目录,那么你所要做的就是执行popd命令:$popd/usr/lib~/Downloads~popd命令不仅会将当前目录更改为/usr/lib,它还会从目录堆栈中删除~/Desktop,从命令输出中可以看出。这样,popd命令将允许您以相反的顺序浏览这些目录。一些高级用法现在我们已经讨论了pushd和popd命令的基础知识,让我们继续讨论与这些命令相关的其他一些细节。首先,这些命令还允许您操作目录堆栈。例如,假设您的目录堆栈如下所示:$dirs~/Desktop/usr/lib~~/Downloads现在,我们的要求是更改堆栈中目录路径的顺序,顶部元素(~/Desktop)在底部,其余的每一个都向上移动一个位置。这可以使用以下命令来实现:pushd+1上述命令对目录堆栈的执行结果:$dirs/usr/lib~~/Downloads~/Desktop因此,我们看到目录堆栈中元素的顺序有变了,就是现在和我们要的一样。当然,您可以多次移动目录堆栈元素。例如,下面的命令会将它们向上移动两次:$pushd+2~/Downloads~/Desktop/usr/lib~你也可以使用负索引值:$pushd-1/usr/lib~~/Downloads~/Desktop同样,您可以将此技术与popd命令结合使用,以在不离开当前工作目录的情况下从目录堆栈中删除任何条目。例如,如果要使用popd删除从顶部开始的第三个条目(当前为~/Downloads),则可以运行以下命令:popd+2记住堆栈索引的初始值为0,因此我们使用2访问第三个条目。所以目录堆栈现在包含:$dirs/usr/lib~~/Desktop确认该条目已被删除。如果由于某种原因您发现很难记住元素在目录堆栈中的位置及其索引,您可以使用dirs命令的-v选项。下面是一个例子:$dirs-v0/usr/lib1~2~/Desktop你可能已经猜到了,左边的数字是索引,后面是这个索引对应的目录路径。注意:将-c选项与dir一起使用以清除目录堆栈。现在让我们简要讨论popd和pushd命令的实际用法。虽然乍一看它们可能看起来有点复杂,但在编写shell脚本时这些命令会派上用场——你不需要记住你来自哪里;只需执行popd,您就会回到原来的目录。有经验的脚本编写者通常按以下方式使用这些命令:popd>/dev/null2>&1上述命令确保popd保持静默(不产生任何输出)。同样,您也可以将pushd静音。pushd和popd命令也被Linux服务器管理员使用,他们通常在几个相同的目录之间移动。此处描述了一些其他有用的使用场景。总之,我同意pushd和popd的概念不是很简单。但是,只需要一点点练习——是的,你需要大量练习。花一些时间使用这些命令,您会开始喜欢它们,尤其是当它们提供便利时。
