Я добавил новый псевдоним scp_using_rsync
, который использует rsync для копирования файлов через SSH с определенными параметрами. Я хотел связать завершение bash для scp с этим псевдонимом.bash-completion - функция завершения определена при первом вызове команды
Это работает, когда я добавить эту строку:
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
получает определенные в моей Баш среде, только после того, как я пытаюсь вкладки-завершения с SSH/УПП по крайней мере один раз в эта оболочка. Поэтому, если я непосредственно запускаю scp_using_rsync
в новой оболочке, я бы получил ошибку _scp
.
Выход из 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-завершения для
scp_using_rsync
с завершением bash scp аналогичным образом?
Ссылка на руководство по bash: [Программируемое завершение] (http: // www. gnu.org/software/bash/manual/bashref.html#Programmable-Completion) – pynexj
Вау! не знал, что у bash была опция загрузки новых доработок «на лету». Вы правы, я вижу функцию '_completion_loader()', определенную в '/ usr/share/bash-completion/bash_completion', которая, кажется, отправляет все файлы в'/usr/share/bash-completion/bash_completion' и, следовательно, пополнения для ssh/scp загружаются. Милая! :) Я думаю, что для моего случая использования я переопределяю и определяю свой собственный загрузчик завершения для определения предполагаемых завершений, а затем вызываю его в bash-завершении. – Tuxdude