我最近在shell中花費了很多時間,我想知道標籤自動完成是如何工作的。它背後的機制是什麼? bash如何知道每個目錄的內容?bash選項卡完成如何工作?
回答
有兩個部分來自動完成:
Readline庫,如已經fixje提到,管理命令行編輯,並在按下標籤時調回bash,以啓用完成。然後,Bash給出(參見下一個點)可能完成的列表,並且readline將插入儘可能多的字符,這些字符是已經輸入的字符明確標識的。(您可以非常詳細地配置readline庫,請參閱Bash手冊的Command line editing部分詳細信息)。
Bash本身有buildin
complete
來定義個別命令的完成機制。如果對於當前命令沒有定義,則它使用文件名完成(使用opendir/readdir,如Ignacio所述)。在Programmable Completion部分描述了定義自己的完井部分。總之,使用
complete «options» «command»
您可以定義某個命令的完成。例如complete -u su
表示 當完成su
命令的參數時,搜索當前系統的用戶。如果是更復雜的比 正常選項可以覆蓋, 可以使用
-F function
,然後將調用一個shell函數生成的列表(取決於參數指標,或者根據之前的參數例如不同的完井)可能的完成。 (這是例如用於git的完成,這是非常複雜的,這取決於子,有時 在選項中給出,並使用有時分支的名稱(這是什麼慶典知道)。
你可以使用簡單的complete
列出當前bash環境中定義的現有完成,以便對可能的情況有一個印象。如果安裝了bash-completion軟件包(或者它已在系統上命名),那麼可以完成很多命令正如Wrikken所說的那樣,/ etc/bash_completion包含一個bash腳本,該腳本通常在shell啓動時執行以配置此腳本。其他自定義腳本可以放在/etc/bash_completion.d中;那些都來自/ etc/bash_completion。
如果您對基本知識感興趣: Bash使用readline,它具有歷史記錄和基本完成功能。如果你想得到詳細的理解,你可以檢查來源。 此外,還可以使用輸入行以完成建立自己的CLI界面
- 1. Git bash選項卡完成.sh文件
- 2. 如何使PowerShell的選項卡完成的工作像猛砸
- 3. bash可編程選項卡完成增量目錄完成
- 4. 如何從不同的路徑啓用bash選項卡完成?
- 5. 如何使用gflags讓自己的項目獲得bash選項卡完成項?
- 6. MySQL選項卡完成不起作用
- 7. Mongo shell選項卡完成
- 8. SFTP選項卡完成
- 9. CQLSH選項卡完成和歷史記錄不工作
- 10. zsh選項卡完成目錄堆棧不工作
- 11. 選項卡完成我的vim的命令不工作
- 12. 是否editline選項卡完成應該工作?
- 13. Bash選項卡在固定目錄中完成文件
- 14. 與Ubuntu的bash選項卡完成問題12.04
- 15. 爲Mercurial啓用bash選項卡完成(hg)
- 16. 無法在Bash/Zsh中找到Rubygem的選項卡完成
- 17. 擴展Bash選項卡完成:如何處理路徑/部分命令?
- 18. jquery選項卡 - 如何使它工作?
- 19. 如何完成某項工作
- 20. PowerShell cmdlet參數值選項卡完成
- 21. 限制zsh選項卡完成行爲
- 22. Matlab的選項卡完成類
- 23. 爲TSCH可編程選項卡完成
- 24. 在rbash中允許選項卡完成
- 25. 編程自定義選項卡完成
- 26. 窗口中的python選項卡完成
- 27. 等待chrome.tabs.update選項卡完成加載
- 28. Emacs中的Sublime Text選項卡完成
- 29. zsh:強制單選項卡完成
- 30. 獲得ipdb的IPython選項卡完成
您可能想要檢查'/ etc/bash_completion'(至少,這是Debian中很多魔術的地方)。 – Wrikken 2011-04-06 18:18:12
@Wrikken:這是bash_completion,它依賴於製表符完成,但不完全如此。 – 2011-04-06 18:35:50
關於* nix stackexchange還有幾個問題,包括:http://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial http://unix.stackexchange.com/questions/1800/custom-autocomplete http://unix.stackexchange.com/questions/12356/how-does-tab-auto-complete-find-options-to-complete以及SU上的至少一個:http://superuser.com/問題/ 289539 /定製的bash標籤完成 – Cascabel 2012-02-15 02:20:12