Баш в комплекте со знаком "@"

Я пытаюсь создать сценарий автозаполнения для 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

Я поставил этот файл в моем bashrc.

Теперь, когда я печатаю userA и нажмите Tab, функция автозаполнения даст мне userA@host1, Когда я печатаю userB и нажмите Tab, функция автозаполнения даст мне userB@, но я не могу получить полную строку (userB@host2 или же userB@host3).

Это также не работает, когда я печатаю userA@h и дважды нажмите кнопку Tab. Так что, похоже, застрял из-за @ знак. (Когда я удаляю @ Войдите из функции _scp_completion, она работает нормально.)

Есть идеи, чтобы это исправить? Спасибо!

1 ответ

Решение

Самый простой способ заставить это работать - удалить '@' от $COMP_WORDBREAKS или Баш справится @ само собой. Вы можете попробовать вот так:

COMP_WORDBREAKS=${COMP_WORDBREAKS//@}
complete -W 'userA@host1 userB@host2 userB@host3' scp

Согласно Bash Doc:

COMP_WORDBREAKS

Набор символов, который библиотека readline рассматривает как разделители слов при выполнении завершения слова.

Другие вопросы по тегам