linux中的pushd、popd与dirs
最近在项目中,看到一些模块的启动脚本中,有一些 pushd、popd等操作。之前并没有接触过这类命令,但是目测它是与目录相关的,因为都是操作完了目录之后,才能运行启动命令。
dirs
展示目录栈。
什么是目录栈?
使用cd
命令进入一个目录后,该目录会存放进以个栈中,当前目录永远位于栈顶。dirs
可以用来查看栈中的目录信息。如:
注意:最左边表示栈顶,最右边表示栈底。
一些具体操作:
1 | -c:删除目录栈中的所有记录 |
有了目录栈,自然会有与栈相关的操作,如入栈与出栈,即可通俗理解成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 -
的加强版本,实际作用可能并不是特别大。
linux中的pushd、popd与dirs