cd + script de conclusão do bash

1

Eu tenho projetos da web em /var/www/projects/some/long/path/strange-project-name

Agora quero digitar terminal:

webs str{TAB}

Ele deve ser preenchido automaticamente para webs strange-project-name (baseando-se em ls /var/www/projects/some/long/path/ ) e depois de executar o comando, o pwd deve apontar para o caminho do projeto. Tipo de smart cd strange-project-name com autocomplete

Como você implementaria esse recurso? Algum alias inteligente? Função em .bashrc ? Script?

Algum alias inteligente?

    
por takeshin 05.11.2010 / 13:36

4 respostas

4

Você precisaria de um parter duplo. Um , um script de conclusão:

_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 depende do pacote bash-completions que está sendo instalado. Se você não tiver, altere a linha:

cur=$(_get_cword)

para:

cur=${COMP_WORDS[$COMP_CWORD]}

Dois , uma função:

webs () {
    local projdir=/var/www/projects/some/long/path
    cd "$projdir"
    do_something_ "$@"
}
    
por 05.11.2010 / 16:08
2

Não tenho certeza se é isso que você precisa ...

no terminal ...

sudo vim /etc/inputrc

encontre essas linhas e descomente-as:

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

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

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

agora você pode completar automaticamente os comandos do seu histórico com page up / down

    
por 05.11.2010 / 13:43
1

Eu criaria um script de autocompletar bash personalizado para isso. Dê uma olhada no diretório /etc/bash_completion.d e seus inúmeros exemplos. Em seguida, crie um arquivo chamado webs para esse diretório e adapte-o às suas necessidades.

    
por 05.11.2010 / 13:47
0

Corrija-me se estiver errado, mas acho que é exatamente isso que Lightning foi criado para. É um projeto Ruby, então essa não é uma boa resposta se usar o Bash é um objetivo em si.

    
por 06.04.2011 / 18:12