Moved ssh completion to separate file.

This commit is contained in:
David Paleino 2008-09-27 12:58:42 +02:00
parent ebe750ffcf
commit 2df67cecb4
2 changed files with 100 additions and 101 deletions

View File

@ -2624,107 +2624,6 @@ _known_hosts()
complete -F _known_hosts traceroute traceroute6 tracepath tracepath6 \
ping ping6 fping fping6 telnet host nslookup rsh rlogin ftp dig ssh-installkeys mtr
# ssh(1) completion
#
have ssh && {
_ssh()
{
local cur prev
local -a config
COMPREPLY=()
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
-*c)
COMPREPLY=( $( compgen -W 'blowfish 3des 3des-cbc blowfish-cbc \
arcfour cast128-cbc' -- $cur ) )
;;
-*i)
_filedir
;;
-*l)
COMPREPLY=( $( compgen -u -- $cur ) )
;;
*)
_known_hosts -a
[ $COMP_CWORD -eq 1 ] || \
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -c -- $cur ) )
esac
return 0
}
shopt -u hostcomplete && complete -F _ssh ssh slogin sftp xhost autossh
# scp(1) completion
#
_scp()
{
local cur userhost path
COMPREPLY=()
cur=`_get_cword ":"`
_expand || return 0
if [[ "$cur" == *:* ]]; then
local IFS=$'\t\n'
# remove backslash escape from :
cur=${cur/\\:/:}
userhost=${cur%%?(\\):*}
path=${cur#*:}
# unescape spaces
path=${path//\\\\\\\\ / }
if [ -z "$path" ]; then
# default to home dir of specified user on remote host
path=$(ssh -o 'Batchmode yes' $userhost pwd 2>/dev/null)
fi
# escape spaces; remove executables, aliases, pipes and sockets;
# add space at end of file names
COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \
command ls -aF1d "$path*" 2>/dev/null | \
sed -e "s/[][(){}<>\",:;^&!$&=?\`|\\ ']/\\\\\\\\\\\\&/g" \
-e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) )
return 0
fi
[[ "$cur" == */* ]] || _known_hosts -c -a
local IFS=$'\t\n'
COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* \
2>/dev/null | sed \
-e "s/[][(){}<>\",:;^&!$&=?\`|\\ ']/\\\\&/g" \
-e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) )
return 0
}
complete -F _scp $nospace scp
# ssh-copy-id(1) completion
#
_ssh-copy-id() {
local cur prev
COMPREPLY=()
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
-*i)
_filedir
;;
*)
_known_hosts -a
[ $COMP_CWORD -eq 1 ] || \
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -- $cur ) )
esac
return 0
}
complete -F _ssh-copy-id $filenames ssh-copy-id
}
# rsync(1) completion
#
have rsync &&

100
contrib/ssh Normal file
View File

@ -0,0 +1,100 @@
# ssh(1) completion
#
have ssh && {
_ssh()
{
local cur prev
local -a config
COMPREPLY=()
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
-*c)
COMPREPLY=( $( compgen -W 'blowfish 3des 3des-cbc blowfish-cbc \
arcfour cast128-cbc' -- $cur ) )
;;
-*i)
_filedir
;;
-*l)
COMPREPLY=( $( compgen -u -- $cur ) )
;;
*)
_known_hosts -a
[ $COMP_CWORD -eq 1 ] || \
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -c -- $cur ) )
esac
return 0
}
shopt -u hostcomplete && complete -F _ssh ssh slogin sftp xhost autossh
# scp(1) completion
#
_scp()
{
local cur userhost path
COMPREPLY=()
cur=`_get_cword ":"`
_expand || return 0
if [[ "$cur" == *:* ]]; then
local IFS=$'\t\n'
# remove backslash escape from :
cur=${cur/\\:/:}
userhost=${cur%%?(\\):*}
path=${cur#*:}
# unescape spaces
path=${path//\\\\\\\\ / }
if [ -z "$path" ]; then
# default to home dir of specified user on remote host
path=$(ssh -o 'Batchmode yes' $userhost pwd 2>/dev/null)
fi
# escape spaces; remove executables, aliases, pipes and sockets;
# add space at end of file names
COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \
command ls -aF1d "$path*" 2>/dev/null | \
sed -e "s/[][(){}<>\",:;^&!$&=?\`|\\ ']/\\\\\\\\\\\\&/g" \
-e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) )
return 0
fi
[[ "$cur" == */* ]] || _known_hosts -c -a
local IFS=$'\t\n'
COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* \
2>/dev/null | sed \
-e "s/[][(){}<>\",:;^&!$&=?\`|\\ ']/\\\\&/g" \
-e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) )
return 0
}
complete -F _scp $nospace scp
# ssh-copy-id(1) completion
#
_ssh-copy-id() {
local cur prev
COMPREPLY=()
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
-*i)
_filedir
;;
*)
_known_hosts -a
[ $COMP_CWORD -eq 1 ] || \
COMPREPLY=( "${COMPREPLY[@]}" $( compgen -- $cur ) )
esac
return 0
}
complete -F _ssh-copy-id $filenames ssh-copy-id
}