「tab complete」によって表示されたコマンドのリストをパイプ処理する方法は?


12

bashでコマンドを使用するとき、使用可能なコマンドを表示するためのダブルタブオプションが好きです。一部のコマンドは、他のコマンドよりも一致する可能性が高くなります。

タブ補完のスクリーンショットhttp://img13.imageshack.us/img13/5541/picturemhy.jpg

ダブルタブの出力をパイプラインでsomwehereに送る方法はありますgrepか?関連する投稿を見つけましたが、それを実装してgrepにパイプする方法がわかりません。


あなたはgrep正規表現に入るとどのくらい正確に想像しますか?(y or n or g[rep])?私は悲観的に聞こえたくないのですが、bashコードに追加せずにこれを実行できるとは思えません。
ケビン

回答:


21

コマンドの場合compgen -c

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

この出力は、単純にパイプ処理できますgrep


+1コマンドについて...次の興味深い部分は、このためのキーボードショートカットを作成する方法です。
rozcietrzewiacz

3

@ Salutisの者の回答に基づいて、私はと呼ばれるスクリプトを作成compし、中に保存され~/bin/compている検索commandsaliases、およびbuiltins(オプションフラグは、-cab参照はbashのmanエントリを、存在する場合、パイプを出力するオプションの二番目のパラメータで、)grep用と検索2番目のパラメーター。

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

個人的には、スクリプトのシェル履歴(に関連するものhistory -d)から最後のコマンドを削除して、bash履歴を検索してもcompエントリが見つからないようにする方法を考えたいと思います。私もこれを使用して実行できることを知っていますがHISTIGNORE、Linuxはかなり強力であるため、スクリプトファイルからそれを実行する方法も必要です。


1
もちろん、これをニーズに合わせて調整することもできますが、これで開始できます。
2011

-3

探しているものを見つけてみませんか?

例:

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

あなたのユースケースを知っていれば、より詳細なコマンドの例を作成できます。


2
言い換えれば、bashの補完が行うことを何でも再実装することができます。確かに、しかしそれは実用的ではありません、そしてそれは問題が何についてであるかではありません。
Gilles 'SO-悪
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.