问题标签 [bash-completion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2960 浏览

bash - 使用 Makefile 中的通用目标进行 make 的 Bash 完成

我有一个 Makefile,我的大部分目标都是通过固定序列创建的。似乎 bash 完成只建议正常目标的完成,例如

而不是通用目标。有没有办法让 bash 完成所有目标,即使它们没有像上面的例子那样明确?更具体地说,假设我定义了一个目标名称列表,并执行以下操作:

有什么方法可以使这些目标可用于 bash 完成?或者,甚至更高级,假设我有两个列表,并且我希望目标由两个列表中元素的所有可能组合组成。我也可以将这些目标用于 bash 完成吗?

0 投票
5 回答
2095 浏览

bash - 带有可变隐藏根前缀的 Tcsh 和/或 bash 目录完成

我正在尝试在 tcsh 和/或 bash 中设置目录补全(两者都在我的站点上使用),但略有不同:对于特定命令“foo”,我希望补全使用自定义函数来匹配第一个 / 分隔的术语到实际的子树节点,然后按照正常目录完成任何后续术语。它是 cdpath 和完成的组合,或者我认为是目录完成的一种形式,其中起点由完成脚本控制。它将按如下方式工作:

我们愿意这样做是因为我们有一个大型的生产开发树(这是一个 CGI 生产设施),精通 shell 的用户一直在导航和跳跃。抱怨是树的上层繁琐且多余;他们只需要快速搜索第一个术语即可找到可能的“头”选择并从那里完成目录完成。看起来可编程完成可以提供一种方法来做到这一点,但事实证明它非常难以捉摸。

我已经多次尝试自定义 bash 和 tcsh 补全来做到这一点,但我得到的最接近的是一种“单词补全”形式,其中用户必须将目录级别视为带有空格的单独单词(例如 foo scene/shot /元素/工作区/ ...)。我可以继续修改我当前的脚本——但我一直想知道是否有什么我不理解的东西——这是我第一次尝试完成程序,并且在 shell 书籍和互联网上的文档和示例非常薄. 如果有任何完成大师可以让我走上正轨,我将不胜感激。

FWIW:这是我到目前为止所得到的(首先是 tcsh,然后是 bash)。请注意,静态根 '/root/sub1/sub2/sub3' 只是搜索功能的占位符,它将在不同级别找到不同的匹配项。如果我能让它工作,我可以稍后加入搜索功能。同样,这两个示例都进行了单词补全,这要求用户在每个匹配项之后输入一个空格(我还必须删除函数中的空格来构造一个实际的路径,哎呀!)

TCSH 示例(注意该函数实际上是一个 bash 脚本):

重击示例:

0 投票
1 回答
2286 浏览

bash - 编写自定义 bash 完成规则

我的目录充满了具有相同前缀的文件,我希望能够在 vim 中快速打开这些文件。例如,我可能有:

我想要的是能够在这些目录之一中并输入:

它会自动完成:

为了实现这一点,我很高兴每个目录都有一个名为“.completion”的文件,其中包含“bar_”。

我遇到的问题是我想要以下行为:

地点 | 是光标,因此如果文件匹配,则在末尾添加空格。如果我们匹配前缀,请不要添加空格。

到目前为止,我最好的是这种行为减去最后添加的空格。我尝试了各种方法,都无济于事。以下是我所拥有的:

任何关于如何让它在文件名完成后添加空格的想法,但不是在前缀完成后添加空格,将不胜感激。

0 投票
2 回答
39144 浏览

arrays - 在 bash 完成的上下文中,关于 ${array[*]} 与 ${array[@]} 的混淆

我第一次尝试编写 bash 补全,我对取消引用 bash 数组 (${array[@]}${array[*]}) 的两种方法有点困惑。

这是相关的代码块(顺便说一句,它可以工作,但我想更好地理解它):

bash 的文档说

可以使用 ${name[subscript]} 引用数组的任何元素。需要大括号以避免与 shell 的文件名扩展运算符冲突。如果下标是“@”或“*”,则单词将扩展为数组名称的所有成员。只有当单词出现在双引号中时,这些下标才会有所不同。如果单词是双引号,则 ${name[*]} 扩展为单个单词,每个数组成员的值由 IFS 变量的第一个字符分隔,${name[@]} 扩展 name 的每个元素一个单独的词。

现在我想我明白这compgen -W需要一个包含可能替代词列表的字符串,但在这种情况下,我不明白“${name[@]} 将名称的每个元素扩展为一个单独的词”是什么意思。

长话短说:${array[*]}作品;${array[@]}没有。我想知道为什么,我想更好地理解究竟${array[@]}扩展成什么。

0 投票
4 回答
1959 浏览

bash - 以编程方式访问特定命令的 bash 完成

我正在尝试编写一个小型命令启动器应用程序,并且想在我自己的完成系统中使用 bash 的选项卡完成。我已经能够使用compgen -abck.
但是,我还想获得特定命令的完成:例如,输入git p应该显示 git 命令的完成。

有什么办法可以compgen用来做到这一点吗?如果没有,还有其他方法可以让我以编程方式获取完成列表吗?

[编辑:澄清一下,我不是想为 bash提供补全——我的应用程序是一个 GUI 命令启动器。我只是想在我自己的应用程序中使用 bash 的现有完成。]

0 投票
2 回答
1507 浏览

linux - Rails 3 的 bash_completion

有没有bash_completion为 Rails 3 准备好的脚本?

0 投票
2 回答
2060 浏览

bash - 仅向用户显示 COMPREPLY bash 完成选项的子字符串

在 bash 完成脚本中,假设COMPREPLY=(aa/ba/ aa/bb/). 调用脚本时,完成选项对用户来说如下所示:

但是,我想对这些选项的显示方式有更多的控制。特别是,我只想向用户显示每个 COMPREPLY 选项的子字符串,类似于现在 bash 中目录完成的工作方式:

有没有办法在 bash 中做到这一点?

0 投票
6 回答
24981 浏览

makefile - bash完成makefile目标

假设我有一个简单的 makefile,例如:

然后在 bash 我想要类似的东西:

制作 h <标签>

所以它可以完成

打个招呼

我找到了一种简单的方法,比如创建空文件hellobye但我正在寻找更复杂的.

0 投票
6 回答
13472 浏览

bash - bash 中的动态 case 语句

我试图弄清楚如何在 bash 脚本中创建动态案例语句。

例如,假设我有一个 awk 语句的输出,其内容如下

在这种情况下,输出可以随时更改。

如果此 awk 输出中包含一个值,我将尝试执行不同的逻辑。

因此,如果上面的数据在 $list 中,那么我在概念上想做类似的事情:

我正在尝试使用它来构建动态自定义选项卡完成功能(有关一些背景信息,请参见http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2)。

有任何想法吗?

谢谢。

0 投票
5 回答
12629 浏览

bash - bash 和 readline:用户输入循环中的制表符完成?

我正在制作一个 bash 脚本,它向用户显示命令行。

cli代码是这样的:

澄清:在 Bash 4中制作和测试

因此,“read -e”提供了 readline 功能,我可以调用命令、编辑输入行等。我不能以任何方式让 readline 的制表符完成工作!

我尝试了两件事:

  1. 应该如何完成:使用 bash 内置“完成”和“compgen”,据报道可以在这里工作 更新:据报道它不能在脚本中工作

  2. 这个丑陋的解决方法

为什么在脚本中使用“完成”时 readline 行为不正确?当我在交互模式下从 bash 尝试它时它可以工作......