2010-09-23 49 views
11

的bash別名我有一堆在該路徑上存在目錄的腳本,所以 我可以訪問每一個無論我在哪裏。有時候這些都是非常簡單的實用腳本, 「vims」該文件。我不時想快速看到腳本文件的內容並查看腳本打開的文件路徑(然後製作cat,grep ...)。與參數,並自動完成

我想提出將「貓」定腳本無論我在哪裏的別名。
給定一個不工作:
alias a="cat `which \$1`"
如果我把腳本的名稱,而不是參數號($ 1)它工作正常。但是 不帶參數。

第二個問題(我希望生活如此美麗!)將獲得 自動完成該別名的腳本名稱。
使用,可以在我的「bin」目錄將另一種方法,我可以存在的腳本。

回答

6

如果你的函數被稱爲「foo」,那麼你的完成在功能看起來是這樣的:

如果您已經安裝了bash補包:

_foo() { local cur; cur=$(_get_cword); COMPREPLY=($(compgen -c -- $cur)); return 0; } 

如果不這樣做:

_foo() { local cur; cur=${COMP_WORDS[$COMP_CWORD]}; COMPREPLY=($(compgen -c -- $cur)); return 0; } 

然後將其啓用:

complete -F _foo foo 

命令compgen -c將導致完井包括系統上的所有命令。

你「foo」函數可能看起來像這樣:

foo() { cat $(type -P "[email protected]"; } 

這將cat一個或多個文件,其名稱作爲參數傳遞。

+0

:-)非常感謝這篇文章。希望能找到一段時間來測試它,我沒有接受答案。我正在尋找什麼。 – Gadolin 2010-09-28 20:16:58

6

對於參數的別名,使用function而不是別名:

a() { cat `which $1` ;} 

或者,如果你做的多條線路,跳過個分號:

a() { 
    cat `which $1` 
} 

你可以交互地輸入它在shell提示符下:

shell:>a() { 
>cat `which $1` 
>} 
shell:> 
+0

+1我有這樣的解決方案。成爲我的英雄,並告訴我有關該功能的自動完成功能。所以我不必每次都手動輸入命令。現在,當我調用路徑中的命令時,我會自動完成。 – Gadolin 2010-09-23 14:05:50