Bash自动完成吞咽'@'

时间:2016-08-26 11:10:28

标签: bash autocomplete

我正在尝试编写一个bash自动完成脚本来完成已知的ssh主机名。

这适用于裸体主机名(例如$ ssh someh<TAB>完成到$ssh somehost.example.com)但在使用user@host模式时失败。 在这种情况下,第一次完成工作,但吞下'@'字符:

$ ssh user@someho<TAB>
产量
$ ssh usersomehost.example.com

然后进一步完成失败,因为usersomehost.example.com现在被视为$COMP_CWORDS中的一个单词。

这是完成工作的功能:

_complete_ssh_hosts ()
{
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  comp_ssh_hosts=$(awk 'BEGIN{FS=",| "} !/^[[#]|^$/ { print $1 }' ~/.ssh/known_hosts;
                   awk '/^Host.*/ { if ($2 ~ !/^\*.*/) print $2}' ~/.ssh/config)
  COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- "$cur"))
  return 0
}

任何人都可以给我一个关于我做错的指针吗?

0 个答案:

没有答案