如何通过“选项卡完成”显示的命令列表进行管道传输?

如何通过“选项卡完成”显示的命令列表进行管道传输?

在 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]

根据选项显示可能的完成情况。

旨在从生成可能的 shell 函数内使用 完成情况。如果提供了可选的 WORD 参数,则匹配 WORD 已生成。

退出状态:返回成功,除非提供了无效选项或发生错误。

有关更多详细信息,请man bash在页面中搜索compgen,因为它是内置的 bash shell 命令。

用法示例:

$ compgen -c bas
basename
base64
bashbug
bash

您可以简单地通过管道将该输出发送到grep.例子:

$ compgen -c bas | grep bug
bashbug

答案2

根据@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 非常强大,所以也必须有一种方法可以从脚本文件中做到这一点 - 对吧?

答案3

为什么找不到您要找的东西?

例子:

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

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

相关内容