From 2df67cecb404f527435c57c68d2fedcff41ad470 Mon Sep 17 00:00:00 2001 From: David Paleino Date: Sat, 27 Sep 2008 12:58:42 +0200 Subject: [PATCH] Moved ssh completion to separate file. --- bash_completion | 101 ------------------------------------------------ contrib/ssh | 100 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 101 deletions(-) create mode 100644 contrib/ssh diff --git a/bash_completion b/bash_completion index 0488f97d..18790aab 100644 --- a/bash_completion +++ b/bash_completion @@ -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 && diff --git a/contrib/ssh b/contrib/ssh new file mode 100644 index 00000000..b3a43e71 --- /dev/null +++ b/contrib/ssh @@ -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 +} \ No newline at end of file