Bash: Completion of word containing @
From FVue
Problem
If bash is programmed to complete ssh with a list of user@hosts from ~/sshs, the @ gets replaced.
This is ~/sshs
foo@www.foo.com foo@foo
This is in ~/.bashrc
_ssh() {
COMPREPLY=( $(grep "^${COMP_WORDS[COMP_CWORD]}" ~/sshs) )
} # _ssh()
complete -F _ssh ssh
And this is what happens:
user:~> ssh f<TAB> becomes (ok): user:~> ssh foo@ user:~> ssh foo@<TAB> becomes (problem): user:~> ssh foofoo@
Solution
Turn off hostname completion:
shopt -u hostcomplete && complete -F _ssh ssh
Drawback of this solution is eh, that hostcompletion is turned off. To turn it on again:
shopt -s hostcomplete
Journal
20060408
Found a bash completing package which also completes user@host like this:
# This function provides simple user@host completion
#
_user_at_host() {
local cur
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
if [[ $cur == *@* ]]; then
_known_hosts
else
COMPREPLY=( $( compgen -u -- "$cur" ) )
fi
return 0
}
shopt -u hostcomplete && complete -F _user_at_host $nospace talk ytalk finger
20060409
When turning off hostcompletion, my code seems to work:
shopt -u hostcomplete
Advertisement