Bash 补全和 grep

Bash 补全和 grep

我在 Debian Squeeze 上安装了一个程序 ( iftop),但几天前我忘记了它的名称。我只知道有关该计划的信息:

1)它被称为*top

2)我可以使用 找到它bash-completions

我想要 的grep所有选项bash-completion。你知道我该怎么做吗?

答案1

使用compgen内置函数获取可能完成的列表:

compgen -c | grep top

您可以请求完成各种类型的完成操作,例如命令、别名、函数...,例如-c相当于-A commands.请参阅man bash了解更多详情。

答案2

使用起来compgen绝对是一件好事。或者,这适用于任何 POSIX shell,您可以使用以下命令签入命令$PATH

(IFS=:; set -f; ls -- $PATH | grep top$)

zsh

type -m '*top'

您还可以查询whatis数据库:

man -ks1:8 top$

答案3

虽然你可以从完成系统中找出来,这不是最明显的方法。

pacakges 安装的几乎所有程序都在 中,因此您可以列出名称以 结尾的/usr/bin程序:/usr/bintop

echo /usr/bin/*top

您可以按 inode 更改时间列出文件。已安装程序的修改时间通常是其编译时间,因为归档和安装工具会将修改时间与数据一起复制。但是文件的 inode 更改时间是最后一次发生任何事情的时间,包括被提取或复制(事实上,它的修改时间更改会重置 inode 更改时间)。由于您最近安装了该程序,因此它是以下命令显示的最后一个程序之一:

ls -lctr /usr/bin/*top

r如果您想从顶部而不是从底部开始查看,请删除该选项。

您还可以查看已安装程序的日志。它们位于/var/log/history.log

答案4

您可以使用 shell 函数来搜索 PATH 和包含二进制文件但不在 PATH 中的已知目录。例子:

findprogram() {
  ls $(echo $PATH:/sbin:/usr/sbin | sed "s/:/\ /g") | grep "$1" | sort --unique
}

用法:

findprogram top

这会输出一个排序的候选列表。

相关内容