【发布时间】:2016-10-14 00:47:45
【问题描述】:
您通常通过在终端中按tab 键来与 bash 完成进行交互。我想在我的脚本中与它进行交互。从本质上讲,我想要一个函数/命令来回答“如果我按下 tab 并且已经输入了文本 xyz 并将光标作为位置 n,会有什么建议?”
这个函数存在吗?我找到了compgen,但它的文档记录很差,似乎没有做我想做的事。
【问题讨论】:
标签: bash autocomplete tab-completion compgen
您通常通过在终端中按tab 键来与 bash 完成进行交互。我想在我的脚本中与它进行交互。从本质上讲,我想要一个函数/命令来回答“如果我按下 tab 并且已经输入了文本 xyz 并将光标作为位置 n,会有什么建议?”
这个函数存在吗?我找到了compgen,但它的文档记录很差,似乎没有做我想做的事。
【问题讨论】:
标签: bash autocomplete tab-completion compgen
compgen 似乎正是您想要使用的。要显示如果您输入 com 并按 TAB 键会发生什么,请使用:
compgen -c com
或者:
compgen -A command com
这将输出所有 Bash 内置函数以及从 PATH 找到的外部二进制文件和脚本。
如果您想从compgen 的输出中删除所有 Bash 内置程序并仅显示外部二进制文件/脚本,可以从 the documentation 找到更多信息。
【讨论】:
git sta<tab>,我会收到 3 个建议:stage、stash 和 status。但是如果我运行compgen -c 'git sta',我不会得到任何建议。
/etc/profile.d/bash_completion.sh(或类似名称的东西),它要么包含魔法本身,要么来源魔法,来自/usr/share/bash-completion/bash_completion。此评论中提到的路径来自 Ubuntu 14.04 LTS;因此,您的发行版可能使用不同的文件名,但机制仍然相同。
bash 本身提供一些标志或输入,比如bash -c "git s\t" 或其他什么?
compgen。如果你想模仿你正在使用的特定系统中发生的事情—— git 子命令也完成了——你必须自己在 compgen 之上实现所有魔法。在这一点上,与compgen 达成和解可能是一个好主意,因为任何其他事情都无法证明实施的麻烦。