在我的巴斯克。我试图完成命令scp,如下所示
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工作目录中没有类似的命名文件):
>scp alex@[TAB]
alex@192.0.0.1 alex@192.0.0.1
>scp alex@192.0.0.我在描述的实现中得到的行为如下:我输入了scp alex@[TAB],选项卡完成没有完成任何事情,但是在命令下面列出了所有可能的参数:
>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@如何修复函数以获得所需的行为?
发布于 2013-02-06 09:06:32
您需要使用COMP_WORDS数组来获取已键入的当前单词。然后使用compgen命令根据原始单词列表生成可能的完成。
尝试以下几点:
_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)从文件中提取文本更有效。
https://stackoverflow.com/questions/14723557
复制相似问题