タブ補完として表示されるコマンドのリストからどのようにパイプできますか?

タブ補完として表示されるコマンドのリストからどのようにパイプできますか?

Bashでコマンドを使用すると、私は好きです。ダブル-Tab使用可能なコマンドのオプションを表示します。一部のコマンドは他のコマンドよりも一致する可能性が高くなります。例:以下は、git入力して押した後のいくつかの出力ですTab Tab

$ git
git                       git-effort                git-quick-stats
git-alias                 git-extras                git-reauthor
git-archive-file          git-feature               git-rebase-patch
git-authors               git-filechange-search     git-receive-pack
git-back                  git-force-clone           git-refactor
git-blametool             git-fork                  git-release
git-branch_               git-fresh-branch          git-rename-branch
git-branchz               git-graft                 git-rename-tag
git-bug                   git-gs_blametool          git-repl
git-bulk                  git-gs_branch_            git-reset-file
git-changelog             git-gs_changes            git-root
git-changes               git-gs_diffc              git-rscp
git-chore                 git-guilt                 git-scp
git-clang-format          git-ignore                git-sed
git-clang-format-6.0      git-ignore-io             git-setup
git-clear                 git-info                  git-shell
git-clear-soft            gitk                      git-show-merged-branches
git_commit_r              git-lfs                   git-show-tree
git-commits-since         git-line-summary          git-show-unmerged-branches
git-contrib               git-local-commits         git-squash
git-count                 git-lock                  git-stamp

たとえば、doubleの出力をTabどこかにパイプする方法はありますかgrep?関連記事を見つけました(TABオートコンプリートは完了するオプションをどのように見つけますか?)、しかし出力をgrep

答え1

コマンドの場合を使用しますcompgen -c。この単語はcompgen明らかに「完成ジェネレータ」を表します。ソースhelp compgen(強調追加):

compgen: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]

オプションに従って可能な完了を表示します。

可能な生成を行うシェル関数内で使用するためのものです。 完成。オプションのWORDパラメーターが指定されている場合は一致します。 WORDが作成されました。

終了ステータス:無効なオプションが指定されているかエラーが発生しない限り、成功を返します。

詳細は組み込みのbashシェルコマンドなので、man bashページで検索してみてください。compgen

使用例:

$ compgen -c bas
basename
base64
bashbug
bash

その出力を単にgrep

$ compgen -c bas | grep bug
bashbug

答え2

@salutisの答えに基づいて '、および、(オプションフラグを参照)を検索する呼び出ししてcomp保存するスクリプトを作成しました。~/bin/compcommandsaliasesbuiltins-cabバッシュマンアイテム)、オプションの2番目の引数がある場合は、出力をパイプしてgrep2番目の引数を取得します。

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履歴から最後のコマンド(関連するもの)を削除する方法を見つけることにも興味があります。私もこれができることを知っていますが、Linuxは非常に強力なので、スクリプトファイルでもこれを行う方法が必要です。そうですか?bashcompHISTIGNORE

答え3

なぜ欲しいものが見つかりませんか?

例:

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

ユースケースを知ることで、より詳細なコマンド例を作成できます。

関連情報