Linux中的pushd和popd

Linux中的pushd和popd其实,很早就知道pushd和popd在linux中可以用来方便地在多个目录之间切换。那时比较浮躁,感觉切换目录没必要这么复杂。在实际中,发现通过使用pushd和popd能够极大地提高效率。0、使用cd-进行目录切换一般,Shell中都可以通过cd-命令回到之前的目录,下面是一个例子:$pwd/home/lfqy$cd/$cd-/home/lfqy$实际上,cd-中,-就

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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

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

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

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

Jetbrains全家桶1年46,售后保障稳定

实际上,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 -v
 0  ~
$ cd /
$ dirs -v
 0  /
$ dirs -c
$ dirs -v
 0  /
$ 

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

1.2 pushd

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

  1. pushd 目录

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

    $ pwd
    /home/lfqy
    $ pushd /
    / ~
    $ dirs -v
     0  /
     1  ~
    $ pushd ~/Music/
    ~/Music / ~
    $ dirs -v
     0  ~/Music
     1  /
     2  ~
    $
    

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

  2. pushd不带任何参数。

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

    $ dirs -v
     0  ~/Music
     1  /
     2  ~
    $ pushd
    / ~/Music ~
    $ dirs -v
     0  /
     1  ~/Music
     2  ~
    $ pushd
    ~/Music / ~
    $ dirs -v
     0  ~/Music
     1  /
     2  ~
    $ 
    
  3. pushd +n

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

    $ dirs -v
     0  ~/Music
     1  /
     2  ~
    $ pushd +2
    ~ ~/Music /
    $ dirs -v
     0  ~
     1  ~/Music
     2  /
    $ pushd +1
    ~/Music / ~
    $ dirs -v
     0  ~/Music
     1  /
     2  ~
    $ 
    

1.3 popd

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

  1. popd不带参数

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

    $ dirs -v
     0  ~/Music
     1  /
     2  ~
    $ popd
    / ~
    $ dirs -v
     0  /
     1  ~
    $ popd
    ~
    $ dirs -v
     0  ~
    $ 
    
  2. popd +n

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

    $ dirs -v
     0  ~/Music
     1  /
     2  ~
    $ popd +2
    ~/Music /
    $
    

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

2、pushd和popd的+n和-n

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213500.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【剑指offer】第一个仅仅出现一次的字符

    【剑指offer】第一个仅仅出现一次的字符

    2021年12月5日
    43
  • 排序算法最坏情况下的比较次数怎么算_选择排序最坏情况

    排序算法最坏情况下的比较次数怎么算_选择排序最坏情况在最坏情况下,冒泡排序、直接插入排序与简单选择排序法均需要比较n(n-1)/2次。希尔排序需要比较n^1.5次,堆排序需要比较的次数最少,为nlog2n。

    2022年8月23日
    8
  • FRP内网穿透_花生壳内网穿透6元

    FRP内网穿透_花生壳内网穿透6元在Web应用上线前都会在内网进行测试,而有些功能是只有在公网上才能做测试的,比如为APP提供的接口等等。所以经常需要在正式上线之前将内网的服务器映射到公网上去。也就是赋予内网上服务器一个域名,开放几个端口。一般来说都使用内网穿透工具完成这个操作,比如在公网上购置一台服务器,不需要配置很高,只要流量够用就行。然后在公网服务器上配置穿透工具的服务端,比如ngrockc或者frp,然后在能接通公网的内网…

    2025年11月7日
    5
  • pandas数据清洗详细教程_excel数据清洗工具

    pandas数据清洗详细教程_excel数据清洗工具Pandas数据清洗常见方法01读取数据df=pd.read_csv(‘文件名称’)02查看数据特征df.info()03查看数据量df.shape04查看各数字类型的统计量df.describe()05去除重复值df.drop_duplicates(inplace=True)06重置索引data.reset_index(inplace=True,drop=True)07查看缺失值信息data.loc[data[‘列名’].isnull()]01

    2025年9月27日
    3
  • 【Python学习 】Python实现的FTP上传和下载功能

    【Python学习 】Python实现的FTP上传和下载功能一、背景最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能。因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录。二、ftplib介绍Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件。Python2.7系列官方文档:https://docs.python.org/2/lib

    2022年6月12日
    59
  • 补码的运算方法「建议收藏」

    补码的运算方法「建议收藏」负数在计算机中是用补码的形式存储的,正数在计算机中是用原码的形式存储的。正数求原码直接将十进制转二进制即可,负数的补码是在原码的基础上除符号位外其余位取反后+1。但是用这种方式求负数补码用编程实现不太方便,下面介绍一种用编程实现起来较简便的求负数补码的方法:1.求出负数绝对值的原码2.从原码的最后一位数码位往前数,当遇到第一个1时停在此位置3.将第一个1前面的数码全部求反…

    2022年9月23日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号