2010-09-23 32 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