CD + bash完成脚本

我在/var/www/projects/some/long/path/strange-project-name有web项目

现在我想inputterminal:

 webs str{TAB} 

它应该自动完成webs strange-project-name (基于ls /var/www/projects/some/long/path/ ),执行命令后, pwd应指向项目path。 一种聪明的cd strange-project-name与自动完成

你将如何实现这个function? 一些聪明的别名? 函数在.bashrc ? 脚本?

一些聪明的别名?

你需要一个双亲。 ,完成脚本:

 _webs() { local cur prev projdir=/var/www/projects/some/long/path COMPREPLY=() cur=$(_get_cword) prev=${COMP_WORDS[COMP_CWORD-1]} COMPREPLY=( $( compgen -W '$( command ls "$projdir/$cur*" | sed "s|$projdir/||")' -- '' ) ) } complete -F _webs webs 

_get_cword依赖于正在安装的bash-completions包。 如果你没有它,那么改变这一行:

 cur=$(_get_cword) 

至:

 cur=${COMP_WORDS[$COMP_CWORD]} 

,function:

 webs () { local projdir=/var/www/projects/some/long/path cd "$projdir" do_something_ "$@" } 

我不确定这是不是你需要的…

在terminal…

 sudo vim /etc/inputrc 

find这些行并取消注释:

 # alternate mappings for “page up” and “page down” to search the history #”\e[5~”: history-search-backward #”\e[6~”: history-search-forward 

现在您可以使用页面向上/向下自动完成历史logging中的命令

我会为此创build一个自定义的bash自动完成脚本。 看看/etc/bash_completion.d目录及其众多的例子。 然后创build一个名为webs的文件到该目录,并根据您的需要进行调整。

纠正我,如果我错了,但我认为这正是闪电创build的。 这是一个Ruby项目,所以如果使用Bash本身就是一个目标,这不是一个好的答案。