如何通过“ tab complete”显示管道显示的命令列表?


12

在bash中使用命令时,我喜欢double选项卡选项以显示可用命令。一些命令比其他命令具有更多可能的匹配项:

选项卡补全的屏幕快照http://img13.imageshack.us/img13/5541/picturemhy.jpg

有没有办法将double选项卡的输出通过管道传递到somwehere,例如grep?我找到了相关的帖子,但是我仍然不确定如何实现将其通过管道传递到grep。


您如何想象自己会输入grep正则表达式?(y or n or g[rep])?我讨厌听起来很悲观,但是我怀疑如果不将其添加到bash代码中就可以做到这一点。
凯文

Answers:


21

对于命令,请使用compgen -c

$ compgen -c bas
basename
base64
bashbug
bash
basename
base64
bashbug

您可以简单地通过管道输出此输出grep


+1对于命令...下一个有趣的部分可能是如何为此设置键盘快捷键。
rozcietrzewiacz 2011年

3

根据@salutis的答案,我创建了一个脚本,该脚本被调用comp并存储在~/bin/comp该脚本中,并在其中搜索commands',' aliases和' builtins(选项标志,-cab请参阅bash man条目),并带有可选的第二个参数(如果存在),该输出将输出传递给grep并搜索第二个参数。

Usage: comp string [keyword-for-grep]

码:

#!/bin/bash

if [ -z "$1" ]; then
    echo usage: comp string [keyword-for-grep]
    echo 
    exit
fi

if [ -z "$2" ]; then
    compgen -cab -- $1
    exit
fi

compgen -cab -- $1 | grep -i $2

我个人也很想找出一种方法来从脚本的shell历史记录中删除最后一个命令(与相关的内容history -d),以便在搜索bash历史记录时不会找到comp条目。我知道我也可以使用它来执行此操作,HISTIGNORE但是linux非常强大,因此也必须有一种方法可以从脚本文件中执行此操作-对吗?


1
当然,您可以根据自己的需要进行调整,但这应该可以帮助您入门。
标记

-3

为什么不找到您想要的?

例:

find / -name ec2* -executable -type f -perm -og+rx -print

了解您的用例后,我可以创建一个更详细的命令示例。


2
换句话说,无论bash的完成是什么,您都可以重新实现。当然,但这不切实际,也不是问题所在。
吉尔(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.