您的位置:首页 > 运维架构 > Shell

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

2011-02-16 14:44 232 查看
经常在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$ #此时目录不会切换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: