美文网首页
Linux中的pushd和popd切换目录

Linux中的pushd和popd切换目录

作者: 可能性之兽 | 来源:发表于2022-12-05 11:44 被阅读0次

    一直想知道在Linux如何快速切换各种目录,发现pushd和popd便是很好的工具,有些需要切换距离很远的目录的情况比cat有用的多

    Linux中的pushd和popd - 简书 (jianshu.com)

    (base) [lp@local test]$ tldr pushd
    
      pushd
    
      Place a directory on a stack so it can be accessed later.
      See also `popd` to switch back to original directory and `dirs` to display directory stack contents.
    
      - Switch to directory and push it on the stack:
        pushd path/to/directory
    
      - Switch first and second directories on the stack:
        pushd
    
      - Rotate stack by making the 5th element the top of the stack:
        pushd +4
    
    
    
    (base) [lp@local test]$ tldr popd
    
      popd
    
      Remove a directory placed on the directory stack via the pushd shell built-in.
      See also `pushd` to place a directory on the stack and `dirs` to display directory stack contents.
      More information: https://www.gnu.org/software/bash/manual/html_node/Directory-Stack-Builtins.html.
    
      - Remove the top directory from the stack and cd to it:
        popd
    
      - Remove the Nth directory (starting from zero to the left from the list printed with `dirs`):
        popd +N
    
      - Remove the Nth directory (starting from zero to the right from the list printed with `dirs`):
        popd -N
    
    

    pushd

    每次pushd命令执行完成之后,默认都会执行一个dirs命令来显示目录栈的内容。pushd的用法主要有如下几种:
    pushd 目录
    pushd后面如果直接跟目录使用,会切换到该目录并且将该目录置于目录栈的栈顶。(时时刻刻都要记住,目录栈的栈顶永远存放的是当前目录。如果当前目录发生变化,那么目录栈的栈顶元素肯定也变了;反过来,如果栈顶元素发生变化,那么当前目录肯定也变了。)下面是一个例子:

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

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

    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  ~
     $ 
    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  ~
     $ 
    

    popd

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

    popd不带参数

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

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

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

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

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

    pushd和popd的+n和-n

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

    相关文章

      网友评论

          本文标题:Linux中的pushd和popd切换目录

          本文链接:https://www.haomeiwen.com/subject/gnabfdtx.html