2014-09-02 62 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