linux中的pushd、popd与dirs
最近在项目中,看到一些模块的启动脚本中,有一些 pushd、popd等操作。之前并没有接触过这类命令,但是目测它是与目录相关的,因为都是操作完了目录之后,才能运行启动命令。dirs展示目录栈。什么是目录栈?使用cd命令进入一个目录后,该目录会存放进以个栈中,当前目录永远位于栈顶。dirs 可以用来查
最近在项目中,看到一些模块的启动脚本中,有一些 pushd、popd等操作。之前并没有接触过这类命令,但是目测它是与目录相关的,因为都是操作完了目录之后,才能运行启动命令。
dirs
展示目录栈。
什么是目录栈?
使用cd命令进入一个目录后,该目录会存放进以个栈中,当前目录永远位于栈顶。 dirs 可以用来查看栈中的目录信息。如:

注意:最左边表示栈顶,最右边表示栈底。
一些具体操作:
-c:删除目录栈中的所有记录
-l:以完整格式显示
-p:一个目录一行的方式显示
-v:每行一个目录来显示目录栈的内容,每个目录前加上的编号
+N:显示从左到右的第n个目录,数字从0开始
-N:显示从右到左的第n个日录,数字从0开始

有了目录栈,自然会有与栈相关的操作,如入栈与出栈,即可通俗理解成pushd、popd。
pushd
主要功能就是修改栈顶目录,即切换目录。主要有如下3种体现:
- 将目录入栈,即加入到栈顶。
- 将栈中某个目录切换栈顶。
不带参数,与cd -同语义:

带目录,与cd some_dir同语义:

带+/-n,切换栈中某个具体位置的目录到栈顶:
pushd +N: 将栈内元素循环左移,直到将(从右边数)第N个元素移动到栈顶,由0开始计。pushd -N: 将栈内元素循环左移,直到将(从左边数)第N个元素移动到栈顶,由0开始计。

注:图中~/Movies的标号应该为3,特此更正。
popd
主要功能是将目录出栈。包括栈顶(修改当前目录为上次目录,即单向的cd -)、及其他位置目录(可能不修改栈顶目录)。
- 不带任何参数:栈顶元素出栈。
popd +N:删除栈中(从右边数)第N个元素,由0开始计。popd -N:删除栈中(从左边数)第N个元素,由0开始计。

小结
可以理解为cd -的加强版本,实际作用可能并不是特别大。