我想要一個以編程方式返回bash或zsh完成選項的函數。在stackoverflow上有很多examples of related questions,但沒有適當的,通用的答案在任何地方。我不想知道如何爲bash編寫特定的完成函數。以編程方式獲得bash完成選項
我已經嘗試通過讀取debian/etc/completion shell代碼,通過將tab標籤的控制代碼回顯到「bash -i」來嘗試實現此目的,甚至嘗試使用與python-pexpect自動進行的子進程交互。每當我認爲我成功了,我發現一些小問題使整個解決方案失效。 我接受任何語言的解決方案,但理想情況下它會是python。顯然,精確的輸入輸出將根據系統而變化,但看一看的示例性I /下面○:
- 功能(「GIT中LO」)返回[「登錄」,「笑」,「洛拉」]
- 功能( 「apt-get的出師表」)返回[ 「和apt-get安裝」]
- 功能( 「apt-get的」)返回[]
- 功能(「apt-get的 」)返回[「 容易「get autoclean」,「apt-get autoremove」,...]
- 函數(「./setup」)返回[「./setup.py」]
如果您正在考慮用shell編寫的解決方案,那麼理想情況下,我可以在沒有「源代碼」的情況下執行該解決方案。例如bash「compgen」命令看起來有趣(嘗試「compgen -F _git」),但請注意「bash -c'compgen -F _git'」不起作用,因爲完成助手「_git」不在作用域中。
在'bash'中,完成由'readline'處理,我將從'man bash'中的'READLINE'節開始,也許在源代碼中深入潛水...... Ciao from – gboffi 2014-11-05 16:00:00