Я пытаюсь создать скрипт автозаполнения для scp.Сценарий считывает имя пользователя и хоста из моего файла .ssh / config. Мой файл .ssh / config выглядит следующим образом:
Host host1
HostName host1
User userA
port 22
Host host2
HostName host2
User userB
port 22
Host host3
HostName host3
User userB
port 22
Мой файл .autocomplete_scp.sh:
# SSH
function _scp_completion() {
pcregrep -o -M 'HostName [a-zA-Z.]+[\n\t\s]+User [a-zA-Z]+'
$HOME/.ssh/config | awk 'NR % 2 == 1 { o=$2 ; next } { print $2"@"o}'
}
complete -W "$(_scp_completion)" scp
Iисточник этого файла в моем bashrc.
Теперь, когда я наберу userA
и нажму Tab , функция автозаполнения даст мне userA@host1
.Когда я набираю userB
и нажимаю Tab , функция автозаполнения выдаст мне userB@
, но я не могу получить полную строку (userB@host2
или userB@host3
).
Также не работает, когда я набираю userA@h
и дважды нажимаю кнопку Tab .Так что, похоже, застрял из-за знака @
.(Когда я удаляю знак @
из функции _scp_completion, он работает нормально.)
Есть идеи, как это исправить?Спасибо!