linux - 带有参数和自动完成的 bash 别名

标签 linux bash

我在路径上存在的目录中有一堆脚本,所以 无论我身在何处,我都可以访问每一个。有时那些是非常简单的 util 脚本 “vims”文件。有时我想快速查看脚本文件的内容并查看脚本打开的文件路径(然后 make cat、grep ...)。

我想做一个别名,无论我身在何处,它都会“猫”给定的脚本。
给定一个不起作用:
别名 a="cat `which\$1`"
如果我放置脚本名称而不是参数编号($1),它就可以正常工作。但 没有参数。

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

最佳答案

如果您的函数名为“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 一个或多个名称作为参数传递的文件。

关于linux - 带有参数和自动完成的 bash 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3778065/

相关文章:

bash - 使用 bash <(curl ...) 转义 Makefile 规则中的括号

linux - 编写 Bash 脚本以在登录时出错时注销。需要指导

linux - 将文件中的纪元时间转换为 dd/mm/yy

c - Linux 中对 pthread_create 的 undefined reference

mysql-server 无法在 Linux 上安装

linux - 弱符号、共享库和 dlopen

bash - cron 作业中提供的条件返回 "No such file or directory"

mysql - bash 中如何解析另一个命令的输入?我们如何重定向错误并传递输入?

c - C 函数 recvfrom 和 sendto 是否互斥?

bash - 将一行复制粘贴到 bash 中同一位置的另一个文件中