簡體   English   中英

創建制表符完成腳本。在一種情況下,我想使用完成另一個命令(例如git),是否可能?

[英]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.

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