簡體   English   中英

bash選項卡如何完成工作?

[英]How does bash tab completion work?

我最近花了很多時間在shell中,我想知道選項卡自動完成是如何工作的。 它背后的機制是什么? bash如何知道每個目錄的內容?

自動完成有兩個部分:

  • 正如fixje已經提到的那樣,readline庫管理命令行編輯,並在按下tab時回調bash,以啟用完成。 Bash然后給出(參見下一點)可能的完成列表,readline插入盡可能多的字符,這些字符由已經輸入的字符明確標識。(您可以配置readline庫,請參閱Bash的命令行編輯部分)手冊了解詳情。)

  • Bash本身具有內置的complete ,可以為各個命令定義完成機制。 如果對於當前命令沒有定義任何內容,它使用文件名完成(使用opendir / readdir,如Ignacio所說)。

    定義您自己的完成的部分在可編程完成部分中描述。 簡而言之,通過complete «options» «command»您可以定義某些命令的完成。 例如, complete -u su表示在完成su命令的參數時,搜索當前系統的用戶

    如果這比正常選項可以覆蓋的更復雜(例如,取決於參數索引的不同完成,或取決於先前的參數),您可以使用-F function ,然后它將調用shell函數來生成可能的完成列表。 (例如,這用於git完成,這非常復雜,取決於子命令,有時取決於給定的選項,並且有時使用分支的名稱(這不是bash所知道的)。

您可以使用簡單的complete列出當前bash環境中定義的現有完成,以便對可能的內容留下印象。 如果您安裝了bash-completion軟件包(或者它在系統上命名),則會安裝許多命令的完成,並且正如Wrikken所說, /etc/bash_completion包含一個bash腳本,然后經常在shell啟動時執行配置這個。 其他自定義完成腳本可以放在/etc/bash_completion.d ; 這些都來自/etc/bash_completion

如果您對基礎知識感興趣:Bash使用readline ,其中包含歷史記錄和基本完成功能。 如果您想要詳細了解,可以檢查來源。 此外,您可以使用readline構建自己的CLI接口並完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM