È possibile utilizzare il completamento della scheda. Per impostazione predefinita su molte distribuzioni Linux, bash è impostato in modo tale che quando si preme il tasto [TAB], viene visualizzato un elenco di possibili corrispondenze o, se esiste una sola corrispondenza, è tutto compilato. Per cd, questo è normalmente un elenco di sottodirectory della directory di lavoro corrente. Potresti sovrascriverlo, ma suggerisco invece di creare un alias, come jd
per "jump directory":
alias jd=cd
e quindi, definendo i "segnalibri" desiderati come completamenti per jd. Guarda la pagina man di bash per molte più opzioni (inclusa la generazione automatica dei risultati al volo da un comando o una funzione), ma il modo più semplice è solo un elenco di parole, con -W
:
completo -W "/ srv / www ~ / tmp ~ / work" jd
Ora digita jd
e premi [TAB] e vedrai i tuoi "segnalibri". Digitare qualsiasi parte ambigua, quindi premere [TAB] per completare. (In precedenza, ~
s si espande nella mia home directory, quindi il primo [TAB] mi dà un /
, e se w
premo di nuovo e [TAB], /srv/www
viene compilato.)
Naturalmente, inseriscilo ~/.bash_profile
per farlo persistere.
Oppure, possiamo portarlo al livello successivo. Crea una directory ~/.shortcuts
- a partire da un punto, sarà nascosta e non confondere la tua bella home directory pulita - e riempila con collegamenti simbolici alle tue directory desiderate. Poi, mettere questo nel vostro ~ / .bash_profile:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Questo definisce un completamento leggermente più complicato nella _list_shortcuts
creazione di un elenco di nomi e rende jd
una funzione piuttosto che un semplice alias, poiché vogliamo che agisca diversamente dal giusto cd
. La -P
bandiera per cd
risolvere i collegamenti simbolici, quindi tutto diventa magia trasparente. I nomi delle scorciatoie non devono nemmeno corrispondere agli obiettivi.
Così:
$ 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, per una dose extra di fantasia, fai una jd
lista di tutte le scorciatoie quando eseguite senza alcun parametro:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Nota: lo uso compgen -W $( cmd )
invece compgen -C 'cmd'
perché quest'ultimo non funziona mai per me e non capisco perché. Potrebbe essere una mia nuova domanda. :)