popd和pushd使用

    xiaoxiao2021-12-13  19

    转自http://blog.163.com/benben_long/blog/static/199458243201211334556266/ 让切换目录更方便: pushd,popd,dirs,cd - 一,为何要使用这几个命令?    可能大家会有疑问,为何要使用这几个命令,    难道用cd不就可以切换目录了吗?    没错,使用cd就可以切换到需要访问的目录,    但是有时会是一个路径很长,层次很多的目录,进到此目录下后,这时我们不小心运行了 cd命令,    理所当然,我们回到了自己的home目录,这时如果想回去怎么办?    还有:因为工作的需要,我们需要不停在几个很深层的目录之间切换,不止一个,    那么即使有tab键帮忙,我们也会因为一个cd命令花费很多时间,如何在多个目录之间切换时能更方便些    pushd,popd是我们的好帮手    说明:  pushd,popd,dirs这几个我们讲到的命令是bash内建的命令,          所以只要登录到了bash,这几个命令就可以使用了 二,如何在两个目录之间切换? 如果只是在两个目录之间切换,那么还不必使用pushd,   这时只需使用 cd -就可以了     cd -的作用是可以回到前一个目录,   看例子:     [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/   [root@localhost pics]# cd -    /root   [root@localhost ~]# cd -    /usr/share/kde4/apps/kget/pics   [root@localhost pics]#   怎么样?在两个目录之间切换非常方便,无需再输入很长的路径   说明:   为何cd -能够回到前一个目录?   这是因为 -在此处等同于 $OLDPWD变量,   此问题可以参见bash的info信息,   cd 一项有相关的说明: An argument of - is equivalent to $OLDPWD.  $OLDPWD变量就是bash所记录的前一个目录   也就是说:$OLDPWD和-相等     下面我们再看一个例子:   [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/   [root@localhost pics]# echo $OLDPWD;   /root   [root@localhost pics]# cd $OLDPWD   [root@localhost ~]# echo $OLDPWD;   /usr/share/kde4/apps/kget/pics   [root@localhost ~]# cd $OLDPWD;   [root@localhost pics]# echo $OLDPWD;   /root    我们可以得到结构:  用cd -和cd $OLDPWD都可以在最近所操作的两个目录之间进行切换 三,如何在多个目录之间切换?   因为 cd -和 cd $OLDPWD都是只支持最近操作的两个目录,所以要在多个目录之间操作时,   我们需要使用 pushd   1,   先来介绍我们会用到的3条命令   pushd:切换到作为参数的目录,并把原目录和当前目录压入到一个虚拟的堆栈中          如果不指定参数,则会回到前一个目录,并把堆栈中最近的两个目录作交换   popd: 弹出堆栈中最近的目录   dirs: 列出当前堆栈中保存的目录列表   看例子:   [root@localhost ~]# pushd /usr/local/sbin/   /usr/local/sbin ~   [root@localhost sbin]# dirs   /usr/local/sbin ~   [root@localhost sbin]# dirs -p -v    0  /usr/local/sbin    1  ~ [root@localhost sbin]# pushd /usr/share/kde4/apps/kget/   /usr/share/kde4/apps/kget /usr/local/sbin ~   [root@localhost kget]# dirs -p -v    0  /usr/share/kde4/apps/kget    1  /usr/local/sbin    2  ~   说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表               -v参数可以在目录前加上编号               注意:有 -v时,不添加 -p也可以每行一个目录的形式显示   说明之二:我们可以看到:最近压入堆栈的目录位于最上面   2,如何在最近的两个目录之间切换?    在最近的两个目录之间切换:用pushd不加参数即可    [root@localhost kget]# pushd /boot/grub/    /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~  [root@localhost grub]# dirs -v    0  /boot/grub    1  /usr/share/kde4/apps/kget    2  /usr/local/sbin    3  ~    [root@localhost grub]# pushd    /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~    [root@localhost kget]# dirs -v    0  /usr/share/kde4/apps/kget    1  /boot/grub    2  /usr/local/sbin    3  ~    [root@localhost kget]# pushd    /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~    [root@localhost grub]# dirs -v    0  /boot/grub    1  /usr/share/kde4/apps/kget    2  /usr/local/sbin    3  ~  说明:可以看到,用pushd不加参数在最近的两个目录之间切换时,         当前目录总是位于堆栈的最上面   3,如何在多个目录之间切换?    用 pushd +n即可    说明:    n是一个数字,有此参数时,是切换到堆栈中的第n个目录,并把此目录以堆栈循环的方式推到堆栈的顶部    需要注意: 堆栈从第0个开始数起    看例子:    [root@localhost grub]# dirs -v    0  /boot/grub    1  /usr/share/kde4/apps/kget    2  /usr/local/sbin    3  ~    [root@localhost grub]# pushd +2    /usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget    [root@localhost sbin]# dirs -v    0  /usr/local/sbin    1  ~ 2  /boot/grub    3  /usr/share/kde4/apps/kget    4,如何把目录从堆栈中删除?    用popd即可    看例子:    [root@localhost sbin]# dirs -v    0  /usr/local/sbin    1  ~    2  /boot/grub    3  /usr/share/kde4/apps/kget    [root@localhost sbin]# popd    ~ /boot/grub /usr/share/kde4/apps/kget    [root@localhost ~]# dirs -v    0  ~    1  /boot/grub    2  /usr/share/kde4/apps/kget [root@localhost ~]# popd +1     ~ /usr/share/kde4/apps/kget    [root@localhost ~]# dirs -v    0  ~    1  /usr/share/kde4/apps/kget    说明:可以看到popd不加参数的运行情况:         popd把堆栈顶端的目录从堆栈中删除,并切换于位于新的顶端的目录    说明之二: popd 加有参数 +n时,    n是堆栈中的第n个目录,表示把堆栈中第n个目录从堆栈中删除 四,多学一点知识    1,pushd和popd都可以只影响堆栈而不切换目录      用 -n参数即可  看例子:     [root@localhost ~]# dirs -v     0  ~     1  /usr/share/kde4/apps/kget     [root@localhost ~]# pushd -n /boot/grub     ~ /boot/grub /usr/share/kde4/apps/kget     [root@localhost ~]# dirs -v      0  ~      1  /boot/grub      2  /usr/share/kde4/apps/kget     2, dirs可以清空目录堆栈       用 -c参数即可      看例子:      [root@localhost ~]# dirs -v      0  ~      1  /boot/grub      2  /usr/share/kde4/apps/kget      [root@localhost ~]# dirs -c  [root@localhost ~]# dirs -v      0  ~      说明:  位于堆栈顶部的目录是当前目录,它不能被pop出去的
    转载请注明原文地址: https://ju.6miu.com/read-950269.html

    最新回复(0)