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

经常在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$                      #此时目录不会切换   

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25050.html