1

I have web projects in /var/www/projects/some/long/path/strange-project-name

Now I want to type in terminal:

webs str{TAB}

It should autocomplete to the webs strange-project-name (basing on ls /var/www/projects/some/long/path/) and after executing the command, the pwd should point to project path. Kind of smart cd strange-project-name with autocomplete

How would you implement this feature? Some smart alias? Function in .bashrc? Script?

Some smart alias?

4 Answers 4

5

You would need a two-parter. One, a completion script:

_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 depends on the bash-completions package being installed. If you don't have it then change the line:

cur=$(_get_cword)

to:

cur=${COMP_WORDS[$COMP_CWORD]}

Two, a function:

webs () {
    local projdir=/var/www/projects/some/long/path
    cd "$projdir"
    do_something_ "$@"
}
1
  • Thanks. With this as a start I managed to do what I needed.
    – takeshin
    Nov 6, 2010 at 12:44
2

I'm not sure if this is what you need...

in terminal...

sudo vim /etc/inputrc

find this rows and uncomment it:

# alternate mappings for “page up” and “page down” to search the history

#”\e[5~”: history-search-backward

#”\e[6~”: history-search-forward

now you can auto complete commands from your history with page up/down

1

I would create a custom bash autocompletion script for that. Take a look at /etc/bash_completion.d directory and its numerous examples. Then create a file called webs to that directory and adapt it to your needs.

0

Correct me if I'm wrong, but I think this is exactly what Lightning was created for. It's a Ruby project, so this isn't a good answer if using Bash is a goal in itself.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .