李守中

Bash 8 目录堆栈

Table of Contents

目录堆栈这部分主要被用在编译脚本中,方便在多层路径中切换。

1 cd 命令

执行 cd ( 命令后不跟路径 ) 默认切换到环境变量 $HOME 保存的路径。通常是家目录。

如果 cd 命令后跟的路径不以 / 开头,则使用环境变量 $CDPATH 内的路径作为基准路径。如果 $CDPATH 不存在,则基准路径为当前路径。

给个例子:

# 使用 cd Desktop 命令从 /home/lsz/Downloads
# 切换到 /home/lsz/Desktop
$ export CDPATH=/home/lsz
$ pwd
/home/lsz/Downloads
$ cd Desktop/
$ pwd
/home/lsz/Desktop

cd - 命令可以返回上一次路径切换之前所在的目录。

# 当前目录是 /home/lsz
$ cd /opt
$ pwd
/opt
# 重新回到 /home/lsz
$ cd -
$ pwd
/home/lsz

2 pushd 和 popd

pushd 命令和 popd 命令可以操作目录堆栈。

pushd 命令的用法类似 cd 命令,可以进入指定的目录。

# 进入目录dirname,并将该目录放入堆栈。
$ pushd dirname

第一次使用 pushd 命令时,当前目录先被放入堆栈,然后要进入的目录也被放入堆栈,位置在前一个记录的上方。以后每次使用 pushd 命令,都会将所要进入的目录,放在堆栈的顶部。

执行 popd ( 命令不带参数 ) 会移除堆栈的顶部记录,并进入新的堆栈顶部目录。

下面是一个例子。

# 当前处在主目录,堆栈为空
$ pwd
/home/me

# 进入 /home/me/foo
$ pushd ~/foo
# 当前堆栈为 /home/me /home/me/foo

# 进入 /etc
$ pushd /etc
# 当前堆栈为 /home/me /home/me/foo /etc

# 进入 /home/me/foo
$ popd
# 当前堆栈为 /home/me /home/me/foo

# 进入 /home/me
$ popd
# 当前堆栈为 /home/me

# 目录不变,当前堆栈为空
$ popd

pushd 和 popd 的参数如下:

  • path 路径参数。pushd 将该路径放到堆栈顶部,并进入该目录。popd 没有此参数。
  • -n 表示仅操作堆栈,不改变目录。比如 popd -n 仅删除堆栈顶部的记录,不改变目录,执行完成后还停留在当前目录。
  • +int -int 正负整数参数。整数为堆栈中的位置 ( 从 0 开始 )。并将位置上的路径作为操作对象。不切换目录。
# 从栈顶算起的3号目录 ( 从 0 开始 ),移动到栈顶
$ pushd +3

# 从栈底算起的3号目录 ( 从 0 开始 ),移动到栈顶
$ pushd -3

# 删除栈顶的目录
$ popd +0

# 删除栈底的目录
$ popd -0

# 删除从栈顶算起的3号目录 ( 从 0 开始 )
$ popd +3

# 删除从栈底算起的3号目录 ( 从 0 开始 )
$ popd -3

执行 dirs 可以显示目录堆栈的内容,一般用来查看 pushd 和 popd 操作后的结果。

它有以下参数:

  • c: 清空栈。
  • l: 用户家目录不显示 ~ 前缀,而是输出完整路径。
  • p: 每行一个条目打印目录栈,默认输出在一行。
  • v: 每行一个条目,显示每个条目的位置编号 ( 从 0 开始 )。
  • +N: N为整数,表示显示堆顶算起的第 N 个目录,从零开始。
  • -N: N为整数,表示显示堆底算起的第 N 个目录,从零开始。


Last Update: 2023-05-25 Thu 11:56

Contact: [email protected]     Generated by: Emacs 27.1 (Org mode 9.3)

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议