首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个自动完成功能不能在Linux中自动完成?

为什么这个自动完成功能不能在Linux中自动完成?
EN

Stack Overflow用户
提问于 2013-02-06 07:15:20
回答 1查看 451关注 0票数 1

在我的巴斯克。我试图完成命令scp,如下所示

代码语言:javascript
复制
function _scp_complete
{
  COMPREPLY=""
  COMPREPLY+=( $(cat ~/.ssh_complete ) )
  COMPREPLY+=( $( find . ! -name . -prune -type f ) )
}
complete -F _scp_complete scp

这样做的想法是,当按scp [tab]时,我会看到当前目录中的所有文件以及文本文件~/.ssh_complete中列出的单词。让我们假设这个文件包含以下条目:

alex@192.0.0.1 alex@192.0.0.2

所需的行为如下:我输入scp alex@[TAB]和制表符完成对scp @192.0.0的命令。自动,因为只有两个可能的参数以alex@开头(假设currect工作目录中没有类似的命名文件):

代码语言:javascript
复制
>scp alex@[TAB]
  alex@192.0.0.1 alex@192.0.0.1 
>scp alex@192.0.0.

我在描述的实现中得到的行为如下:我输入了scp alex@[TAB],选项卡完成没有完成任何事情,但是在命令下面列出了所有可能的参数:

代码语言:javascript
复制
>scp alex@[TAB]
  alex@192.0.0.1 alex@192.0.0.1 file1 Music Pictures ./.emacs <ALL files in the current directory>
>scp alex@

如何修复函数以获得所需的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 09:06:32

您需要使用COMP_WORDS数组来获取已键入的当前单词。然后使用compgen命令根据原始单词列表生成可能的完成。

尝试以下几点:

代码语言:javascript
复制
_scp_complete()
{
  local cur=${COMP_WORDS[COMP_CWORD]}
  COMPREPLY=( $(compgen -W "$(< ~/.ssh_complete) $( find . ! -name . -prune -type f )" -- $cur) )
}
complete -F _scp_complete scp

想了解更多细节,请看这篇博文:编写自己的Bash完成函数

注意,我不认为这个完成将工作在文件中的空格在他们的名字。

还要注意的是,与$(cat file)不同,使用$(< file)从文件中提取文本更有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14723557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档