其实,很早就知道pushd和popd在linux中可以用来方便地在多个目录之间切换。那时比较浮躁,感觉切换目录没必要这么复杂。在实际中,发现通过使用pushd和popd能够极大地提高效率。

0、使用cd -进行目录切换

一般,Shell中都可以通过cd -命令回到之前的目录,下面是一个例子:

$ pwd
/home/lfqy
$ cd /
$ cd -
/home/lfqy
$

实际上,cd -中,-就相当于变量$OLDPWD。cd -就相当于cd $OLDPWD。下面是一个例子:

$ pwd
/home/lfqy
$ cd /
$ echo $OLDPWD
/home/lfqy
$ cd $OLDPWD
$ pwd
/home/lfqy
$

1、pushd、popd和dirs

pushd和popd是对一个目录栈进行操作,而dirs是显示目录栈的内容。而目录栈就是一个保存目录的栈结构,该栈结构的顶端永远都存放着当前目录(这里点从下面可以进一步看到)。

1.1 dirs

dirs常用的有两个参数:

选项 含义
-p 每行显示一条记录
-v 每行显示一条记录,同时展示该记录在栈中的index
-c 清空目录栈

下面没有显示地对目录栈进行任何操作,我们来看下当前目录栈的内容是什么:

$ pwd
/home/lfqy
$ dirs -v0  ~
$ cd /
$ dirs -v0  /
$ dirs -c
$ dirs -v0  /
$

可以看出,目录栈中只有一个目录(当然是在栈顶),就是当前所在的目录。当切换目录之后,栈中的目录也随之改变。通过-c选项可以将目录栈中除当前目录之外的其它目录清除,由于上面的例子中目录栈只包含当前目录,所以没有变化。

1.2 pushd

每次pushd命令执行完成之后,默认都会执行一个dirs命令来显示目录栈的内容。pushd的用法主要有如下几种:

  1. pushd 目录

    pushd后面如果直接跟目录使用,会切换到该目录并且将该目录置于目录栈的栈顶。(时时刻刻都要记住,目录栈的栈顶永远存放的是当前目录。如果当前目录发生变化,那么目录栈的栈顶元素肯定也变了;反过来,如果栈顶元素发生变化,那么当前目录肯定也变了。)下面是一个例子:

    $ pwd
    /home/lfqy
    $ pushd /
    / ~
    $ dirs -v0  /1  ~
    $ pushd ~/Music/
    ~/Music / ~
    $ dirs -v0  ~/Music1  /2  ~
    $
    

    这样,不难看出,用pushd在切换目录的同时,也将历史目录以栈结构的形式保存了下来。

  2. pushd不带任何参数。

    pushd不带任何参数执行的效果就是,将目录栈最顶层的两个目录进行交换。前面说过,栈顶目录和当前目录一个发生变化,另一个也变。这样,实际上,就实现了cd -的功能。下面是一个例子(这个例子接上文的执行现场):

    $ dirs -v0  ~/Music1  /2  ~
    $ pushd
    / ~/Music ~
    $ dirs -v0  /1  ~/Music2  ~
    $ pushd
    ~/Music / ~
    $ dirs -v0  ~/Music1  /2  ~
    $
    
  3. pushd +n

    到这里,可能会想如果想切换到目录栈中的任意一个目录,该如何?pushd +n正是这个作用:pushd +n切换到目录栈中的第n个目录(这里的n就是dirs -v命令展示的index),并将该目录以栈循环的方式推到栈顶。下面是一个例子(接上文的执行现场),注意栈循环的方式带来的栈中内容的变化规律:

    $ dirs -v0  ~/Music1  /2  ~
    $ pushd +2
    ~ ~/Music /
    $ dirs -v0  ~1  ~/Music2  /
    $ pushd +1
    ~/Music / ~
    $ dirs -v0  ~/Music1  /2  ~
    $
    

1.3 popd

每次popd命令执行完成之后,默认都会执行一个dirs命令来显示目录栈的内容。popd的用法主要有如下几种:

  1. popd不带参数

    popd不带任何参数执行的效果,就是将目录栈中的栈顶元素出栈。这时,栈顶元素发生变化,自然当前目录也会发生相应的切换(接上文的执行现场),下面是一个例子:

    $ dirs -v0  ~/Music1  /2  ~
    $ popd
    / ~
    $ dirs -v0  /1  ~
    $ popd
    ~
    $ dirs -v0  ~
    $
    
  2. popd +n

    将目录栈中的第n个元素删除(这里的n就是命令dirs -v显示的目录index)。下面是一个例子:

    $ dirs -v0  ~/Music1  /2  ~
    $ popd +2
    ~/Music /
    $
    

    这里可以发现,如果对于目录栈的操作没有引发栈顶元素的变化,将不会导致当前目录的切换。

2、pushd和popd的+n和-n

上面我们用的都是+n作为参数,实际在使用pushd和popd的时候,有时候也会用到-n参数。两者的差别如下:+n的含义是从栈顶往栈底方向进行计数,从0开始;-n的含义刚好相反,从栈底向栈顶方向计数,从0开始。这样有点拗口,实际上,从默认的dirs命令(不带任何参数)的输出来解释最好理解了:+n是指从左往右数,-n是指从右往左数,都是从0开始。

Linux中的pushd和popd相关推荐

  1. linux pushd命令,技术|在 Linux 中使用 pushd 和 popd 命令来进行高效的目录导航

    有时候,通过命令来在 Linux 文件系统导航是一件非常痛苦的事情,特别是对于一些新手.通常情况下,我们主要使用 cd(改变目录)命令在 Linux 文件系统之间移动. 在之前的文章中,我们回顾了一个 ...

  2. linux pushd 不起作用,Linux中的pushd和popd

    其实,很早就知道pushd和popd在linux中可以用来方便地在多个目录之间切换.那时比较浮躁,感觉切换目录没必要这么复杂.在实际中,发现通过使用pushd和popd能够极大地提高效率. 0.使用c ...

  3. linux中pushd和popd用法,在Linux中使用pushd和popd命令操作目录的用法

    pushd 将目录压入目录栈,进行目录切换命令 用法: pushd [-n] [+N | -N | dir] 参数: +n  切换目录,以当前目录为准,从右向左数第n个 -n  切换目录,以当前目录为 ...

  4. linux指令popd,Linux切换目录pushd、popd、dirs命令

    Linux切换目录pushd.popd.dirs命令 pushd和popd在linux中可以用来方便地在多个目录之间切换,切换目录虽然有一点复杂.在实际中,发现通过使用pushd和popd能够极大地提 ...

  5. linux 命令:pushd、popd与dirs用于多路径跳转,用法介绍

    1.dirs用法: dirs: 显示栈里面所有的路径,一定会包含当前路径. dirs -v: 显示栈里面的所有路径和下标,通过下标,我们可以用pushd +下标到这个目录,然后popd+下标把这个路径 ...

  6. linux popd 命令,Linux中的pushd推入和popd弹出命令

    pushd和popd是允许您使用目录堆栈并在Linux和其他类似Unix的操作系统中更改当前工作目录的命令.尽管pushd和popd是非常强大和有用的命令,但它们却被低估并且很少使用. 在本教程中,我 ...

  7. linux 脚本中的push,linux shell之pushd、popd和dirs的使用讲解

    1 问题 我们有时候需要保存多个路径,上下键切换不方便,用cd-只能到上个目录,我们可以用dirs和pushd和popd 2 dirs.pushd.popd dirs: 这个命令显示栈里面所有的路径, ...

  8. 【Linux命令】pushd、popd 实现目录快速跳回(优于cd -)

    linux pushd.popd 命令 popd和pushd使用 # pushd 和 popd 一般用于[切换到最近的目录],而且栈中最好不要多于三个目录 # 问为什么不用 cd - 呢? -- 因为 ...

  9. shell中的pushd与popd

    其实,很早就知道pushd和popd在linux中可以用来方便地在多个目录之间切换.那时比较浮躁,感觉切换目录没必要这么复杂.在实际中,发现通过使用pushd和popd能够极大地提高效率. 0.使用c ...

最新文章

  1. java微博开发_【新手入门篇】新浪微博应用开发之Java入门篇
  2. Emlog5.31后台登录页面自适应源码
  3. ASP.NET页面间数据传递的方法
  4. PHP简单方法判断文件是否是图片 PHP best way to check if file is an image
  5. SAP License:特殊采购类型-寄售及其结算
  6. 2018年1月3日-江苏地税系统无法正常登陆的解决方案
  7. android edittext换行位置不变,Android EditText使用自动换行但无硬性返回
  8. 函数 fork 和函数 vfork区别
  9. Microsemi Libero SoC/IDE/SoftConsole/FlashPro安装包所有版本下载链接
  10. MacOS 开发 —后台启动程序
  11. ShareTech大企业邮件服务器系统软件
  12. xshell双击无反应
  13. HTML+CSS静态页面网页设计作业——我的家乡-四川成都(4页) HTML+CSS+JavaScript
  14. 简图 新聚合图床源码自带鉴黄功能
  15. 设计一个猜拳游戏,完成人机猜拳互动游戏的开发。
  16. python正则表达式入门
  17. Oracle 12CR2查询转换之星型转换
  18. HP C7000刀片服务器学习三
  19. office文件在线预览
  20. 求10000以内的完数

热门文章

  1. h5-浏览器点击跳转微信小程序或微信内部广告页(微信浏览器)跳转小程序的实现方法。
  2. 6-10 两个字符串穿插 (10分)pta,c
  3. 在Java中计算各位数字立方和
  4. 失联8分钟后现神秘“第7次握手” 澳两次发现疑似黑匣子信号 搜救区域最深5000米
  5. 靶向嵌合体PEG-ethoxycarbonyl-propanoic/Dodecaethylene glycol
  6. maven配置多仓库,第一个库没有,找第二个库
  7. ppm理解与代码实现
  8. swagger UI 使用
  9. 美团招聘-测试开发工程师
  10. 订阅号服务器消息推送数量,如何解决微信公众号一个月只能发4次消息的问题...