在 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
了解您的用例我可以创建一个更详细的命令示例。