原文链接:http://blogread.cn/it/article/6648?f=wb,我作了一些小的改动。如需再次转发,请注明。
每天在命令行下,一大部分的工作都是一遍又一遍的输入/usr/lib/python2.7/dist-packages这样来切换目录,现在利用一个简单的配置可以实现如下效果:
root@controller230:/usr/lib/python2.7/dist-packages# cd ~
root@controller230:~#
root@controller230:~# cd /usr/lib/python2.7/dist-packages
root@controller230:/usr/lib/python2.7/dist-packages# mark dist
root@controller230:/usr/lib/python2.7/dist-packages# cd ~
root@controller230:~# g dist
root@controller230:/usr/lib/python2.7/dist-packages# gs
dist -> /usr/lib/python2.7/dist-packages
root@controller230:/usr/lib/python2.7/dist-packages#
实现原理:
在/etc/profile末尾增加以下内容后保存:
# mark
export MARKPATH=$HOME/.marks
export MARKDEFAULT=tag
function g {
local m=$1
if [ "$m" = "" ]; then m=$MARKDEFAULT; fi
cd -P "$MARKPATH/$m" 2>/dev/null || echo "No such mark: $m"
}
function mark {
mkdir -p "$MARKPATH"
local m=$1
if [ "$m" = "" ]; then m=$MARKDEFAULT; fi
rm -f "$MARKPATH/$m"
ln -s "$(pwd)" "$MARKPATH/$m"
}
function unmark {
local m=$1
if [ "$m" = "" ]; then m=$MARKDEFAULT; fi
rm -f "$MARKPATH/$m"
}
function gs {
ls -l "$MARKPATH" | grep ^l | cut -d ' ' -f 10-
}
_completemarks() {
local curw=${COMP_WORDS[COMP_CWORD]}
local wordlist=$(ls -l "$MARKPATH" | grep ^l | cut -d ' ' -f 10)
COMPREPLY=($(compgen -W '${wordlist[@]}' -- "$curw"))
return 0
}
complete -F _completemarks g unmark
以上脚本在Ubuntu下测试通过。其他系统中可能ls -l的输出会不太一样。