【问题标题】:Access bash tab completions from script从脚本访问 bash 选项卡完成
【发布时间】:2016-10-14 00:47:45
【问题描述】:

您通常通过在终端中按tab 键来与 bash 完成进行交互。我想在我的脚本中与它进行交互。从本质上讲,我想要一个函数/命令来回答“如果我按下 tab 并且已经输入了文本 xyz 并将光标作为位置 n,会有什么建议?”

这个函数存在吗?我找到了compgen,但它的文档记录很差,似乎没有做我想做的事。

【问题讨论】:

    标签: bash autocomplete tab-completion compgen


    【解决方案1】:

    compgen 似乎正是您想要使用的。要显示如果您输入 com 并按 TAB 键会发生什么,请使用:

    compgen -c com
    

    或者:

    compgen -A command com
    

    这将输出所有 Bash 内置函数以及从 PATH 找到的外部二进制文件和脚本。

    如果您想从compgen 的输出中删除所有 Bash 内置程序并仅显示外部二进制文件/脚本,可以从 the documentation 找到更多信息。

    【讨论】:

    • 这似乎不起作用。如果我输入 git sta<tab>,我会收到 3 个建议:stagestashstatus。但是如果我运行compgen -c 'git sta',我不会得到任何建议。
    • 嗯,它不是 Bash 完成完成 git 子命令,所以它永远不会像你希望的那样工作。但是,compgen 确实为您生成 Bash 将生成的内容。
    • 嗯,我不是很清楚。这是 Bash,但不是 vanilla Bash 完成。您没有说明您正在运行 Bash 的系统,但假设它是一种 GNU/Linux 发行版,您可能会找到 /etc/profile.d/bash_completion.sh(或类似名称的东西),它要么包含魔法本身,要么来源魔法,来自/usr/share/bash-completion/bash_completion。此评论中提到的路径来自 Ubuntu 14.04 LTS;因此,您的发行版可能使用不同的文件名,但机制仍然相同。
    • 所以它相当依赖于系统。我想模仿 bash 的制表符完成,但我真的不想重新实现 bash 的所有逻辑来查找和加载/采购/无论这些文件。有没有办法我可以做到这一点?也许我可以给bash 本身提供一些标志或输入,比如bash -c "git s\t" 或其他什么?
    • 很遗憾没有。如果你想模仿 vanilla Bash,那么你最好的选择就是上面提到的,即。 compgen。如果你想模仿你正在使用的特定系统中发生的事情—— git 子命令也完成了——你必须自己在 compgen 之上实现所有魔法。在这一点上,与compgen 达成和解可能是一个好主意,因为任何其他事情都无法证明实施的麻烦。
    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多