问题 使用参数和自动完成的bash别名


我在路径中存在一堆脚本,所以 无论我在哪里,我都可以访问。有时那些是非常简单的util脚本 “vims”文件。我想不时地快速查看脚本文件的内容并查看脚本打开文件的路径(然后制作cat,grep ......)。

我想制作一个别名,无论我在哪里都会给出“猫”。
鉴于一个不工作:
alias a="cat `which \$1`"
如果我放置脚本名称而不是参数号($ 1),它可以正常工作。但 参数不是。

第二个问题(我希望生活如此美丽!)将会得到 自动完成该别名的脚本名称。
使用可能存在于我的“bin”目录中的脚本将是我可以采取的另一种方法。


4975
2017-09-23 11:54


起源



答案:


如果你的函数被称为“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 "$@"; }

这将 cat 一个或多个文件,其名称作为参数传递。


6
2017-09-23 15:57



:-) 十分感谢你的发文。在希望找到一段时间进行测试之前,我没有接受回答。我正在寻找什么。 - Gadolin


答案:


如果你的函数被称为“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 "$@"; }

这将 cat 一个或多个文件,其名称作为参数传递。


6
2017-09-23 15:57



:-) 十分感谢你的发文。在希望找到一段时间进行测试之前,我没有接受回答。我正在寻找什么。 - Gadolin


对于带参数的别名,请使用 功能 而不是别名:

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

或者,如果您在多行上执行此操作,请跳过分号:

a() {
    cat `which $1`
}

您可以在shell提示符下以交互方式输入它:

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

6
2017-09-23 12:52



+1我有这样的解决方案。成为我的英雄并告诉我该功能的自动完成情况。所以我不必每次都手动输入命令。现在,当我调用路径中的命令时,我会自动完成。 - Gadolin