Você pode usar a conclusão da guia. Por padrão, em muitas distribuições Linux, o bash é configurado para que, quando você pressiona a tecla [TAB], receba uma lista de possíveis correspondências ou, se houver apenas uma correspondência, tudo estiver preenchido. Para cd, normalmente é uma lista de subdiretórios do diretório de trabalho atual. Você pode sobrescrever isso, mas sugiro que crie um alias, como jd
para "diretório de salto":
alias jd=cd
e, em seguida, definindo os "indicadores" desejados como conclusões para o jd. Consulte a página de manual do bash para muito mais opções (incluindo a geração automática de resultados em tempo real a partir de um comando ou função), mas a maneira mais fácil é apenas uma lista de palavras, com -W
:
completo -W "/ srv / www ~ / tmp ~ / work" jd
Agora, digite jd
e pressione [TAB] e você verá seus "favoritos". Digite qualquer parte ambígua e, em seguida, pressione [TAB] para concluir. (Acima, os ~
s se expandem para o meu diretório pessoal, então o primeiro [TAB] me dá um /
, e se eu pressionar w
e [TAB] novamente, /srv/www
é preenchido.)
Obviamente, coloque isso ~/.bash_profile
para fazê-lo persistir.
Ou, podemos levar isso para o próximo nível. Crie um diretório ~/.shortcuts
- começando com um ponto, ele ficará oculto e não atrapalhe seu diretório pessoal limpo e agradável - e preencha-o com links simbólicos para os diretórios desejados. Em seguida, coloque isso em seu ~ / .bash_profile:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Isso define uma conclusão um pouco mais complicada na função _list_shortcuts
de criar a lista de nomes e faz com que jd
seja uma função e não um alias simples, pois queremos que ele atue de maneira diferente da justificada cd
. A -P
bandeira cd
faz com que resolva os links simbólicos, para que tudo se torne uma mágica transparente. Seus nomes de atalho nem precisam corresponder aos alvos.
Então:
$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm 8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work
E, para uma dose extra de fantasia, faça uma jd
lista de todos os seus atalhos quando executados sem nenhum parâmetro:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Nota: eu uso em compgen -W $( cmd )
vez de compgen -C 'cmd'
porque o último nunca funciona para mim e não entendo o porquê. Essa pode ser uma nova pergunta minha. :)