popd和pushd使用

2022-07-23 10:50:10 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

让切换目录更方便: 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

我们可以得到结构: 用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://javaforall.cn/126100.html原文链接:https://javaforall.cn

0 人点赞