2016-08-13 62 views
0

當我用一些糖創建一個包裝現有命令的命令時,我希望新命令支持原始命令的自動完成。有沒有辦法告訴Bash重用另一個命令的自動完成腳本?使用另一個命令的Bash自動完成

傻例如:

cat > ~/ls-on-steroids.sh <<EOF 
echo "Here are some goodies!" 
ls "[email protected]" 
EOF 
chmod +x ~/ls-on-steroids.sh 

現在,如何配置我的新的腳本,這樣當我鍵入:

~/ls-on-steroids.sh <TAB><TAB> 

我想相同的行爲與:

ls <TAB><TAB> 

最好以便攜式,可重複的方式,無需手動追蹤的位置0的自動完成腳本。

回答

2

您必須手動配置它,但從現有命令複製完成相對簡單。首先,運行complete -p ls以查看ls定義了什麼命令(如果有的話)。如果什麼都沒有出現,ls不使用任何特殊的完成。你可能期待看到類似以下的輸出,雖然

complete -o default -F _longopt ls 

它說,該函數_ls被調用來生成竣工的命令ls,如果不產生任何結果,請使用bash默認完成。你可以通過簡單運行

complete -o default -F _longopt ls_on_steroids 

應用相同的函數來ls_on_steroids(即,具有替換ls_on_steroidsls如在由complete -p打印的命令的最後一個參數)。

+0

聽起來像它可以自動化。任何警告雖然?這個命令可以在不同的系統上看起來不同嗎有沒有更直接的方法來獲取提供自動填充的命令的名稱? –

+0

看起來'complete'需要多個命令,所以我可以運行:'complete -p ls | sed's/$/ls-on-steroids /'將腳本包含在'ls'的自動完成中。 –

+0

我的意思是:'$(complete -p ls | sed's/$'ls-on-steroids /')' –