Skip to content
Mr.HopeMr.Hope
主页
  • Linux
    • 简介

      • Linux 简介
        • Linux 和 UNIX
          • 语言
            • Linux 的优点
              • 桌面系统
              • 文件结构

                • 文件
                  • 目录
                    • Linux 挂载
                    • 命令

                      • 基本格式
                        • 文件夹
                          • 文件
                            • 其他文件命令
                              • 命令补全
                                • 命令执行
                                  • 环境变量
                                    • 链接
                                    • Bash

                                      • Bash 简介
                                        • Bash 的基本语法
                                          • Bash 的模式扩展
                                            • 引号和转义
                                              • Bash 变量
                                                • 字符串操作
                                                  • Bash 的算术运算
                                                    • Bash 行操作
                                                      • 目录堆栈
                                                        • cd -
                                                          • pushd,popd
                                                            • dirs 命令
                                                            • Bash 脚本入门
                                                              • read 命令
                                                                • 条件判断
                                                                  • 循环
                                                                    • Bash 函数
                                                                      • 数组
                                                                        • set 命令
                                                                          • 脚本除错
                                                                            • mktemp 命令,trap 命令
                                                                              • Bash 启动环境
                                                                                • 命令提示符
                                                                                • ubuntu

                                                                                  • 管理工具
                                                                                    • 开发软件
                                                                                      • 网络服务器相关
                                                                                        • 语言切换
                                                                                        • CentOS 教程
                                                                                          • WSL
                                                                                            • ssh

                                                                                              目录堆栈

                                                                                              阮一峰2020年6月3日
                                                                                              • Linux
                                                                                              • Bash
                                                                                              大约 3 分钟

                                                                                              此页内容
                                                                                              • cd -
                                                                                              • pushd,popd
                                                                                              • dirs 命令

                                                                                              为了方便用户在不同目录之间切换,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 开始),作为操作对象。这时不会切换目录。

                                                                                                # 从栈顶算起的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 命令可以显示目录堆栈的内容,一般用来查看 pushd 和 popd 操作后的结果。

                                                                                              dirs
                                                                                              

                                                                                              它有以下参数。

                                                                                              • -c: 清空目录栈。
                                                                                              • -l: 用户主目录不显示波浪号前缀,而打印完整的目录。
                                                                                              • -p: 每行一个条目打印目录栈,默认是打印在一行。
                                                                                              • -v: 每行一个条目,每个条目之前显示位置编号(从 0 开始)。
                                                                                              • +N: N 为整数,表示显示堆顶算起的第 N 个目录,从零开始。
                                                                                              • -N: N 为整数,表示显示堆底算起的第 N 个目录,从零开始。
                                                                                              编辑此页open in new window
                                                                                              上次编辑于: 2022/2/12 05:50:30
                                                                                              贡献者: Mr.Hope
                                                                                              上一页
                                                                                              Bash 行操作
                                                                                              下一页
                                                                                              Bash 脚本入门

                                                                                              预览:

                                                                                              0  字
                                                                                              评论
                                                                                              Powered by Waline v2.5.1
                                                                                              本教程采用知识共享 署名-相同方式共享 3.0协议