与linux cd命令相似,用pushd实现在不同目录间切换
在命令行模式下,当你工作在不同目录中,你将发现你有很多时间都浪费在重复输入上如果这些目录不在同一个根目录中,你不得不在转换时输入完整的路径名,这难免让人有些难以忍受但你可以用以下的一个或两个步骤来避免所有多余的输入:用命令行解释器中的历史记录,或者用命令行函数pushd
用命令行解释器中的历史记录的好处是只需按很少的键在命令行中用向上的箭头来查找你用过的命令,直到你找到,然后按回车键如果你所切换的两个目录在整个驱动器的子目录结构中很接近,那用解释器中的历史记录可能是你最好的选择
然而,如果你在两个截然不同的路径间转换的话,你可能很希望利用pushd这个函数,你可以用它创建一个目录堆栈(在内存中的一个列表)
注释:缺省情况下,pushd函数可能不包括在你的Linux中;但它包涵在Red Hat和用Red Hat驱动的系统中如果你的系统中没有pushd函数,你可以在ibiblio.org网站上下载相关的函数工具
这里说一下怎么用pushd假设你现在工作在/usr/share/fonts/目录下你需要对/usr/share/fonts/做一些改动,你将频繁的在两个目录间切换开始在一个目录下,用pushd函数切换到另一个目录在我们的例子中,开始在/usr/share/fonts/下,你键入pushd /home/yxy/,然后按回车键现在,你将在下一行看到堆栈中的内容:/home/yxy /usr/share/fonts
正如你所看到的,当你键入pushd和一个路径名时,将自动产生一个堆栈,内容是你键入的目录名和你当前工作的目录名在我们的例子中,你所键入的路径(/opt/wonderword/fonts)在堆栈的顶部
快速返回上一级目录,你可以直接键入pushd,如果不跟路径名,
你将返回到堆栈中前一个目录的上一层目录
如果你需要从堆栈中删除一个目录,键入popd,然后是目录名称,再按回车键想查看堆栈中目录列表,键入dirs,然后按回车键popd和dirs命令也是常用函数中的一部分

一,为何要使用这几个命令?
可能大家会有疑问,为何要使用这几个命令,
难道用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出去的
- [linux服务器][bash]让切换目录更方便
本文转载:[linux服务器][bash]让切换目录更方便: 一,为何要使用这几个命令? 可能大家会有疑问,为何要使用这几个命令, 难道用cd不就可以切换目录了吗? 没错,使用cd就可以切 ...
- linux shell pushd popd dirs命令
1.dirs 1)功能显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录) 2)语法(1)格式:dirs [-clpv] [+n] [-n](2)选项-c 删除目录栈 ...
- cd:切换目录
cd命令 1.命令详解 [功能说明] cd命令是“change directory”中每个单词的首字母缩写,其功能是从当前工作目录切换到指定的工作目录. [语法格式] cd [option] ...
- pushd&popd&dirs命令
dirs 显示当前目录栈中的所有记录 -p 一个目录一行显示 -l 以完整格式显示 -c 删除目录栈中的所有记录 -v 每行一个目录来显示,每个目录前加上编号 +N 从左到右的第n个 ...
- linux shell 脚本攻略学习15--如何只列出目录,如何快速切换目录
工作中经常遇到关于目录方面的问题,例如,如何只列出当前目录下的所有目录,以及如何快速高效的切换目录,而不需要使用鼠标,下面将简单介绍关于这两方面的解决方案: 一.如何只列出目录? 看似简单的任务,其实 ...
- 启用shopt 选项实现不使用 CD 命令进入目录/文件夹
众所周知,如果没有 cd 命令,我们无法 Linux 中切换目录.这个没错,但我们有一个名为 shopt 的 Linux 内置命令能帮助我们解决这个问题. shopt 是一个 shell 内置命令,用 ...
- Linux快速目录间切换cd pushd popd
1. cd - 当前目录和之前所在的目录之间的切换 2. cd + Alt . 用上次命令的最后一个目录路径 要用上上次命令的最后一个目录,就Alt+.两次就可以了 3. push ...
- cd 切换目录
1. 功能说明 cd是“change directory”中每个氮气的首字母缩写功能是重当前工作目录切换到指定的工作目录:cd是内建命令. 2. 语法格式 cd [option] [dir] cd ...
- 切换目录命令 - cd
1) 命令名称:cd 2) 英文原意:change directory 3) 命令所在路径:shell 内置命令 4) 执行权限:所有用户 5) 功能描述:切换目录 6) 语法: cd[目录名] 例子 ...
随机推荐
- dreamweaver8快捷键
替换Ctrl+H 处理表格 选择表格(光标在表格中) Ctrl+A 移 动到下一单元格Tab 移 动到上一单元格Shift+Tab 插入行(在当前行之前)Ctrl+M 在表格末插入一行 在最后一个单元 ...
- java hasmap对象的深复制实现:字节码复制和对象序列化成字符串复制比较。
/** * Created by Administrator on 2016/11/23. */ public class test { public static void main(String[ ...
- 字符串匹配算法BF和KMP总结
背景 来看一道leetcode题目: Implement strStr(). Returns the index of the first occurrence of needle in haysta ...
- java多线程模拟停车位问题
/** * */ package Synchronized; /** * @author libin * */ public class CarTest { public static void ma ...
- Boostarp-响应式
一.响应式 响应式介绍 - 响应式布局是什么? 同一个网页在不同的终端上呈现不同的布局等 - 响应式怎么实现的? 1. CSS3 media query 媒体查询 2. JS去控制网页的布局和样式等 ...
- 在openrc中从keystone V2 到 V3
#!/bin/bash ] then echo "Usage $0 <keystone.rc>" exit fi . $ NEW_OS_AUTH_URL=`echo $ ...
- Spring Boot入门——Redis
1.添加redis相关依赖 2.application.properties增加redis的相关属性 3.编写redisConfig进行redis配置 4.编写测试类redisService.redi ...
- 碰到错误Could not load the Tomcat server configuration at \Servers\MyEclipse Tomcat v8.5-config. The Servers project is closed.
本人用的myeclipse是2017版. 可能解决的方法是: 双击MyEclipse Tomcat v8.5,然后就会弹出以下窗口,
- PowerDesigner(一)-PowerDesigner概述(系统分析与建模)
PowerDesigner概述 PowerDesigner是Sybase公司推出的一个集成了企业架构,UML(统一建模语言)和数据库的CASE(计算机辅助软件工程)工具.它不仅可以用于系统设计和开发 ...
- spring: @Pointcut给重复的注解/切点定义表达式
代码如下: package ch2.test; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.a ...