Я добавил новый псевдоним scp_using_rsync
, который использует rsync для копирования файлов по SSH с определенными параметрами. Я хотел связать завершение bash для scp с этим псевдонимом.
Это работает, когда я добавляю эту строку:
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
Единственная проблема заключается в том, что я замечаю, что _scp
определяется в моей среде bash только после того, как я хотя бы один раз пытаюсь завершить табуляцию с помощью ssh/scp в этой оболочке. Поэтому, если я напрямую запущу scp_using_rsync
в новой оболочке, я получу ошибку _scp
not found.
Вывод из typeset -F
в новой оболочке до и после попытки завершения табуляции для команд ssh или scp ясно показывает, что следующие функции определяются после первой попытки автодополнения табуляции:
$ 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
Эти функции, кажется, определены в /usr/share/bash-completion/completions/ssh
в моей системе.
Это мои 2 взаимосвязанных вопроса:
- Как bash определяет, где автоматически брать определения и определять их при первой попытке завершения?
- Как я должен связать завершение bash для
scp_using_rsync
с завершением bash scp аналогичным образом?