Grâce à la réponse de shellholic, j'ai pu le faire (quelque peu) fonctionner pour sftp. Créez d'abord le fichier /etc/bash_completion.d/sftp
avec le contenu suivant:
# custom sftp(1) based on scp
# see http://askubuntu.com/questions/14645/is-it-possible-to-get-tab-completion-with-sftp
#
_sftp()
{
local configfile cur userhost path prefix
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
if [[ "$cur" = -F* ]]; then
cur=${cur#-F}
prefix=-F
else
# Search COMP_WORDS for '-F configfile' or '-Fconfigfile' argument
set -- "${COMP_WORDS[@]}"
while [ $# -gt 0 ]; do
if [ "${1:0:2}" = -F ]; then
if [ ${#1} -gt 2 ]; then
configfile="$(dequote "${1:2}")"
else
shift
[ "$1" ] && configfile="$(dequote "$1")"
fi
break
fi
shift
done
[[ "$cur" == */* ]] || _known_hosts_real -c -a -F "$configfile" "$cur"
fi
# This approach is used instead of _filedir to get a space appended
# after local file/dir completions, and $nospace retained for others.
local IFS=$'\t\n'
COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | sed \
-e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\&/g" \
-e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' -e "s/^/$prefix/") )
return 0
}
complete -o nospace -F _sftp sftp
Ensuite, dans bash, vous devez exécuter . /etc/bash_completion.d/sftp
afin de charger le script.
Tout ce que j'ai vraiment fait, c'est copier / coller le script d'achèvement de scp /etc/bash_completion.d/ssh
et remplacer les occurrences de scp par sftp.
Olivier Lalonde
la source
J'entends qu'un programme appelé with-readline permettra au programme de ligne de commande OpenSSH standard sftp d'utiliser la complétion de tabulation. Je ne peux pas vérifier que cela fonctionne, mais je veux cette même fonctionnalité depuis des années maintenant.
informations sur with-readline et sftp: http://www.greenend.org.uk/rjk/2005/withreadline.html
lien avec ligne de lecture: http://www.greenend.org.uk/rjk/2005/with-readline-0.1.tar.bz2
Faites moi savoir comment ça marche pour vous.
la source