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