shell:BASH 的目录切换
June 10, 2015
By WEN Pingbo ofTinyLab.org
2015/06/02
在 BASH 中你用的最多的命令是什么?这绝对非 cd 莫属(ls 也是个潜力股,暂时做老二吧)。所以在这篇文章中,我们聊聊如何高效的在 BASH 中切换目录。
Table of Contents
往后切换目录
回退目录,正规的做法是
alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..'
甚至可以定义5点的别名,但感觉用到的几率不大。有了这些别名,就可以愉快的用 N 个点来回退 N 级目录。
其实在进行目录切换时,BASH 默认会把上一个目录记录在 OLDPWD。可以用
往前切换目录
进入指定的目录,这个没什么特别的技巧了。老老实实用
CDPATH
我们可以利用 CDPATH 定义
不过这个方法不是很灵活,且有副作用。前段时间,我机器上编译 Android,死活过不去,最后发现是这货搞的鬼。所以,玩玩可以,在生产环境慎用!
CDSPELL
在 BASH 中打开 cdspell(
这个还是很有用的,建议打开。
目录堆栈
前面讲的大多数是两个目录之间的切换,我们可以简单的用一个变量 OLDPWD 来记录。如果涉及到多个目录,为了记录之前目录切换的历史记录,就得另起一套机制了。而 BASH 就为我们提供了这样一套机制 – “目录堆栈(dirs/pushd/popd)”。其运行机制就是一个堆栈,先进先出。我们可以用
有的时候,在脚本中需要临时保存当前工作路径,以便回溯。这个时候就可以利用这个目录堆栈了。
模拟 Windows Explorer (icd)
之前,我一直纠结在为什么 BASH 只能记录两层目录。当你的工作目录层数比较多的时候,你经常需要多次
为了实现这种效果,首先得记录每次进入的目录路径。这个 BASH 自带的目录堆栈可以做,但是 BASH 在 popd 之后,就把栈顶的路径删除了。这样就导致后退后,无法再前进了。所以得额外定义一套机制来保存目录记录。这里我用一个文件来存放,文件的第一行是记录的路径总数,第二行是当前所在的目录位置,而之后的的每一行就代表一条目录记录。比如:
3 2 /home /home/wenpingbo /var/log
这样,后退可以到
逻辑上,得实现 3 个函数
alias cd=icd_main alias h=icd_backward alias l=icd_forward # Ctrl + right bind '"e[1;5D>":"hn>"' # Ctrl + left bind '"e[1;5C>":"ln>"'
这样,就可以用
对应的源码,可以在这找到 icd src
~原创有您,更持久!期待您的支持~
0 0
0 Comments