Я установил автозаполнение в своем .bashrc
следующим образом:
complete -W "$(echo `cat ~/.ssh_complete`;)" scp
но при этом использовались ТОЛЬКО слова, указанные в файле ~/.ssh_complete
. Как можно расширить определение таким образом, чтобы scp
также использует имена файлов в локальном каталоге.
Подойдет простое решение моей проблемы (имена файлов и слова в списке слов), мне не требуется завершение табуляции для распознавания формата / деталей фактического scp
команда. Опять же: я хочу, чтобы завершение табуляции отображало имена файлов в текущем каталоге И отображало записи, указанные в файле ~/.ssh_complete
.
Когда появляется новое предложение, я редактирую файл .bashrc
, введите его и попробуйте завершить табуляцию на scp
очередной раз.
Как задокументировано, вы можете комбинировать их с:
complete -o <comp-options> -W "$(cat ~/.ssh_complete)" scp
куда <comp-options>
позволяет указать, какой тип поведения вы хотите.
Я избавился от нелепого UUoC и эхо для вас.
хорошо, если вы напишете функцию, как показано ниже
function _scp_complete
{
COMPREPLY=""
COMPREPLY+=( $(cat ~/.ssh_complete ) )
COMPREPLY+=( $( ls ) )
}
затем
complete -F _scp_complete scp
-F для завершения означает запустить указанную функцию (_scp_complete), затем использовать массив COMPREPLY с каждым элементом как одно завершение
В функции я сбрасываю COMPREPLY, чтобы она оставалась пустой. Затем я выбираю ~ .ssh_complete (каждая строка становится одним элементом COMPREPLY), а затем добавляю вывод ls.