6.8 目录堆栈(The Directory Stack)

目录堆栈是一个近期访问的目录列表。内建命令 pushd 会将目录添加到堆栈中并改变当前目录。内建命令 popd 会将指定的目录从堆栈中移除,并将当前目录改变为移除的目录。内建命令 dirs 用于显示目录堆栈中的内容。当前目录总是处于堆栈的顶部。

也可以使用 shell 变量 DIRSTACK 来查看目录堆栈的内容。

6.8.1 目录堆栈的内建命令(Directory Stack Builtins)

dirs

dirs [-clpv] [+N | -N]

该命令用于显示当前记住的目录列表。使用 pushd 命令将目录添加到列表中的;popd 命令用于将目录从列表中移除。当前目录总是堆栈中的第一个目录。

选项及参数说明
-c删除所有堆栈中的元素,即清空目录堆栈。
-l产生完整路径名的目录列表;默认列表格式是使用波浪号代表家目录。
-p打印出目录堆栈,使每个条目占用一行。
-v打印出目录堆栈,使每个条目占用一行。每行开头标明该条目在堆栈中的索引号。
+N显示第 N 个目录(当调用 dirs 时不带有任何选项时,是从打印出的列表左边开始计数的),起始值是 0。
-N显示第 N 个目录(当调用 dirs 时不带有任何选项时,是从打印出的列表右边开始计数的),起始值是 0。

popd

popd [-n] [+N | -N]

当使用该命令时不带有任何参数的时候,其会从堆栈顶部移除一个目录并执行 cd 命令进入新的顶部目录。堆栈中的所有元素是从 0 开始编号的,第 0 个元素是使用 dirs 列出的第一个目录;就是说,“popd”等同于“popd +0”。

选项或参数说明
-n当从堆栈中移除目录时,抑制目录的正常变更,以便只对堆栈进行操作。
+N移除第 N 个目录(是从 dirs 显示的列表左边开始计数的),起始值是 0。
-N移除第 N 个目录(是从 dirs 显示的列表右边开始计数的),起始值是 0。

pushd

pushd [-n] [+N | -N | dir]

将当前目录保存到目录堆栈的顶部,并且使用 cd 命令进入参数“dir”的目录。当使用不带有参数的 pushd 时,其会将最顶部的两个目录进行交换并将新顶部目录设置为当前目录。

选项或参数说明
-n当向堆栈添加目录或交换目录时,抑制目录的正常变更,以便只对堆栈进行操作。
+N将第 N 个目录(是从 dirs 显示的列表左边开始计数的,起始值是 0)与顶部目录进行交换。
-N将第 N 个目录(是从 dirs 显示的列表右边开始计数的,起始值是 0)与顶部目录进行交换。
dir将 dir 代表的目录放入堆栈顶部,并且将其设置为新的当前目录,就像使用了内建命令 cd 一样。