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

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_ "$@"
}
  • Thanks. With this as a start I managed to do what I needed. – takeshin Nov 6 '10 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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.