2014-09-02 53 views
0

我有一个程序查找包含主机名和电话号码的文件。当输入主机名作为唯一的sys arg时,程序打开minicom并拨号(在做了其他一些事情之后)。我正在尝试设置我的脚本,所以我可以自动完成sys arg作为文件中包含的任何可能的主机名。我已经看到了其他项目,这些项目有点类似,但并不完全正确,因为我正在尝试去做并且没有让它们工作。从文本文件中提取外壳脚本自动完成选项

源文件例如:

主机名5555555555

主机名5555555555

主机名5555555555

等123分多次

+0

我试图上http://tldp.org/LDP/abs/html/tabexpansion.html描述的方法的命令激活。我对该问题进行了编辑,因为该评论没有真正格式化它的权利 – user2726737 2014-09-02 20:03:17

+0

具体哪些方法?告诉我们你的尝试。你有没有看过'complete'内建的文档? – 2014-09-02 20:07:08

+0

壳脚本: _UseGetOpt-2() { 本地CUR 内容= $(猫dialhosts) COMPREPLY =()#数组变量存储所述可能的完成。 cur = $ {COMP_WORDS [COMP_CWORD]} case“$ cur”in - *) COMPREPLY =($(compgen -W'$ contents' - $ cur));; ESAC 返回0 } 把作为拨号shell脚本第一行: 完整-F _UseGetOpt-2 -o dialhosts ./UseGetOpt-2.sh – user2726737 2014-09-02 20:16:50

回答

0

这是你的函数的工作版本 - 只有必须纠正$contents的值:

_UseGetOpt-2() { local cur contents=$(sed 's/\(.*\) .*/-\1/' dialhosts) 
COMPREPLY=() # Array variable storing the possible completions. 
cur=${COMP_WORDS[COMP_CWORD]} 
case "$cur" in -*) COMPREPLY=($(compgen -W '$contents' -- $cur));; 
esac 
return 0 
} 

complete -F _UseGetOpt-2 UseGetOpt-2.sh