[shell]目录堆栈

目录堆栈

为了方便用户在不同目录之间切换,Bash 提供了目录堆栈功能。

cd -

Bash 可以记忆用户进入过的目录。默认情况下,只记忆前一次所在的目录,cd -命令可以返回前一次的目录。

# 当前目录是 /path/to/foo
$ cd bar

# 重新回到 /path/to/foo
$ cd -

上面例子中,用户原来所在的目录是/path/to/foo,进入子目录bar以后,使用cd -可以回到原来的目录。

pushd,popd

如果希望记忆多重目录,可以使用pushd命令和popd命令。它们用来操作目录堆栈。

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

$ pushd dirname

上面命令会进入目录dirname,并将该目录放入堆栈。

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

popd命令不带有参数时,会移除堆栈的顶部记录,并进入新的栈顶目录(即原来的第二条目录)。

下面是一个例子。

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

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

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

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

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

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

这两个命令的参数如下。

(1)-n 参数

-n的参数表示仅操作堆栈,不改变目录。

$ popd -n

上面的命令仅删除堆栈顶部的记录,不改变目录,执行完成后还停留在当前目录。

(2)整数参数

这两个命令还可以接受一个整数作为参数,该整数表示堆栈中指定位置的记录(从0开始)。pushd命令会把这条记录移动到栈顶,同时切换到该目录;popd则从堆栈中删除这条记录,不会切换目录。

# 将从栈顶算起的3号目录(从0开始)移动到栈顶,同时切换到该目录
$ pushd +3

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

# 删除从栈顶算起的3号目录(从0开始),不改变当前目录
$ popd +3

# 删除从栈底算起的3号目录(从0开始),不改变当前目录
$ popd -3

上面例子的整数编号都是从0开始计算,popd +0是删除第一个目录,popd +1是删除第二个,popd -0是删除最后一个目录,popd -1是删除倒数第二个。

(3)目录参数

pushd可以接受一个目录作为参数,表示将该目录放到堆栈顶部,并进入该目录。

$ pushd dir

popd没有这个参数。

dirs 命令

dirs命令可以显示目录堆栈的内容,一般用来查看pushdpopd操作后的结果。

$ dirs
~/foo/bar ~/foo ~

该命令会输出一行文本,列出目录堆栈,目录之间使用空格分隔。栈顶(最晚入栈的目录)在最左边,栈底(最早入栈的目录)在最右边。

它有以下参数。

  • -c:清空目录栈。
  • -l:用户主目录不显示波浪号前缀,而打印完整的目录。
  • -p:每行一个条目打印目录栈,默认是打印在一行。
  • -v:每行一个条目,每个条目之前显示位置编号(从0开始)。
  • +NN为整数,表示显示堆顶算起的第 N 个目录,从零开始。
  • -NN为整数,表示显示堆底算起的第 N 个目录,从零开始。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FL1768317420

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值