[英]Bash: Getting a command's completion output programmatically (e.g., in a variable)
[英]Creating a tab completion script. In one case I want to use the completion for another command (e.g. git), is it possible?
所以我有一些我正在編寫腳本的命令:
all-build.sh all-git.sh
這些命令運行在多個文件夾和生成輸出窗口(在日志上運行tail -f)和各種其他事情。
但是,他們每個人都采取不同的命令,我希望標簽完成
所以我閱讀了關於制表符完成的教程,我有all-completion.bash腳本,如下所示:
#!/usr/bin/env bash
complete -W "param1 param2 param3" all-build.sh
complete -W "status log push pull" all-git.sh
正如你所看到的那樣,所有構建的自動完成參數都是我自己的定制參數,我很滿意。 然而,git是重復的一些實際的git參數。 所以我真正想要的是:
complete <use git completion> all-git.sh
因此,當我執行all-git submodule upd<tab>
它會使用git的auto complete自動完成all-git submodule update
。
那可能嗎?
我們可能會使用_completion_loader
,(這是用來定義在飛行的完成)以加載git
落成。
然后我們可以在官方的git-completion.sh文件中觀察到,用於完成git“子模塊”的函數叫做_git
,所以我們可以簡單地傳遞它來complete
via -F <function>
選項,參見完整的文檔 。
所以通過寫作
source /usr/share/bash-completion/bash_completion
_completion_loader git
complete -F _git all-git.sh
我們可以實現理想的行為(如果我正確地解決了您的問題)。
注意 : bash_completion
腳本可能位於您的計算機上不同的文件夾中。 我在Ubuntu 16.04上用bash 4.3.48測試了它。
編輯 :如果這不能完全解決您的問題,我相信這是你想要的方式:)。 您可以根據需要改進解決方案。
編輯-2 :我也假設,你已經安裝並運行git完成。
編輯3 :我發現了一些有趣的鏈接,這些鏈接並沒有解決您的特定問題,但可以提供一些更輕松,更深入的知識:
這很簡單:
source /usr/share/bash-completion/completions/git
__git_complete all-git.sh __git_main
__git_complete()
函數是創建Git完成的輔助函數,它由Git本身使用,如下所示: __git_complete git __git_main
。 您可以將它用於特定命令,例如__git_complete all-submodule.sh _git_submodule
。
它是專門為此而設計的,因此無需進一步復雜化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.