J'ai ajouté un nouvel alias scp_using_rsync
qui utilise rsync pour copier des fichiers via SSH avec certaines options. Je voulais lier la complétion bash de scp à cet alias.
Il fonctionne lorsque j'ajoute cette ligne :
complete -o bashdefault -o default -o nospace -F _scp scp_using_rsync 2>/dev/null || complete -o default -o nospace -F _scp scp_using_rsync
Le seul problème, c'est que je le remarque, _scp
est défini dans mon environnement bash, seulement après avoir essayé la complétion de tabulation avec ssh/scp au moins une fois dans ce shell. Ainsi, si je lance directement scp_using_rsync
dans un nouveau shell, j'obtiendrais le _scp
erreur non trouvée.
La sortie de typeset -F
dans un nouveau shell avant et après avoir essayé la complétion par tabulation pour les commandes ssh ou scp indiquent clairement que les fonctions suivantes sont définies après avoir essayé la complétion par tabulation pour la première fois :
$ diff ~/.scratch/file1 ~/.scratch/file2
224a225,227
> declare -f _scp
> declare -f _scp_local_files
> declare -f _scp_remote_files
226a230
> declare -f _sftp
230a235,240
> declare -f _ssh
> declare -f _ssh_ciphers
> declare -f _ssh_macs
> declare -f _ssh_options
> declare -f _ssh_suboption
> declare -f _ssh_suboption_check
Ces fonctions semblent être définies dans /usr/share/bash-completion/completions/ssh
dans mon système.
Ce sont mes deux questions interdépendantes :
- Comment bash trouve-t-il où récupérer les définitions automatiquement et les définir lorsque la complétion est essayée pour la première fois ?
- Comment dois-je lier la complétion bash pour
scp_using_rsync
à la complétion bash de scp d'une manière similaire ?