红联Linux门户
Linux帮助

如何在Shell中快速切换目录?

发布时间:2015-02-16 15:39:52来源:linux网站作者:eijnew

经常在shell下工作的筒子们经常会在不同的目录来回切换,那么,如何能提高切换的效率呢?不用每次手动输入cd /path/to/dir1; cd /path/to/dir2?


在只有两个目录的情况下,有个很简单也很直观的办法:
$ cd -          #表示回到之前的目录=
多说一句,这个-还有其他的一个典型用法:如果文件名参数是一个单破折号"-",表示从标准输入读取文件列表:
$ grep 'abc' -  #表示接受标准输入的数据,并从中找到包含'abc'字符串的行,打印出来
abdse           #我在键盘的输入
abc
abc             #grep的输出
lsl
[CTRL-C]        #按ctrl+c结束输入

两个目录尚且可以用上述方法快速切换,那么对于多个目录呢?pushd,dirs和popd这一组强大而易用的命令现在可以上场了.


对于CS毕业的人来说,栈是很熟悉的了,这一组命令实际上也是维护了一个目录栈.

pushd /path/to/dir,顾名思义,表示将指定目录入栈,另外,它还具有一个更强大的附加功能:像将栈内的元素顺序随意调整(似乎有些违背栈的原理了),
正是这个功能让我们可以随心所欲的切换目录,而无视目录在栈中的位置.这种用法可以描述为pushd +num 后面我将详细介绍.
 
popd /path/to/dir,表示将指定的目录出栈,当我们不需要访问某个目录时,就是用这个命令将其清理出'门户'.与pushd对应,popd也有另一种形式的命令:popd +num.
 
dirs,显示当前栈的内容,从左向右分别是栈顶->栈底.


应用示例:
$ cd
                                                                          
~$ dirs                         #显示当前目录栈                                                                          
#---------------------------------
#我们先加几个目录玩玩
#---------------------------------
~$ pushd ~/A              #将指定目录入栈
~/A ~
~/A$ pushd ~/B            #继续入栈, 注意此时的当前目录已经切换到刚刚入栈的目录,即:~/A
~/B ~/A ~                 #当前栈的内容从左往右:栈顶->栈底
~/B$ pushd ~/C            #最后一个了,大家坚持住
~/C ~/B ~/A ~
#---------------------------------
#现在我们试试切换目录
#---------------------------------
~/C$dirs                  #打印当前栈的内容
~/C ~/B ~/A ~
~/C$ pushd                #切换到B目录,pushd 意思隐含为pushd +1
~/B ~/C ~/A               #切换过去的同时会打印出切换后的栈情形.
~/B$                      #注意当B到栈顶后,剩余元素位置按其之前栈内顺序排列
~/B$ pushd +2             #切换到栈顶+2个目录即A目录
~/A ~/B ~/C
~/A$
#---------------------------------
#有不用的目录,将其扔出
#---------------------------------
~/A$ popd +1              #将~/B目录出栈
~/A ~/C
~/A$                      #此时目录不会切换