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 个目录,从零开始。