问题标签 [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 投票
1 回答
615 浏览

bash - bash的多字命令完成

可能重复:
正确处理 bash 完成中的空格和引号

我想使用多字引用字符串来完成 bash。

例如,我喜欢能够做到这一点

其中“Long String 1”和“Long String 2”是按下选项卡时给出的建议。

我尝试使用它,其中~/strings 包含引用字符串的列表

上面的函数在空格上分割字符串。有没有办法让它返回整个引用的字符串?

例如,如果~/string有以下几行

它将给出 5 个建议而不是 2 个。

0 投票
3 回答
743 浏览

bash - 键入“第一个命令”时的 Bash 可编程完成

有没有办法控制在 bash4 命令提示符上键入的第一个命令的完成?

我可以用完整的 -E 控制“空行”的完成,但是只要键入一些字符,bash(或可能是 readline)就会给我 PATH 中的所有文件名、内置命令(if、then、else...)和函数完成尝试 (TAB)。

我能够通过在 PROMPT_COMMAND 中取消设置 PATH 并通过绑定函数以捕获 DEBUG 来恢复它来避免 PATH 条目,但是摆脱 bash bultin 命令完成没有运气。

有任何想法吗?

0 投票
2 回答
1208 浏览

bash - 制表符完成时如何防止bash完成替换字符

我正在为一个与 curl 共享文件上传语义的工具构建一个 bash 完成脚本。

使用 curl,您可以执行以下操作:

curl -F var=@文件

上传文件。

我的应用程序具有类似的语义,我希望能够在按下“@”后显示可能的文件。不幸的是,事实证明这很困难:

因此,如果命令(到目前为止)以:

将显示当前目录中的文件。

问题是如果我真的点击标签来完成,'@'就会消失!

所以看起来 bash 用选项卡 COMPREPLY 替换了整个当前单词。

避免这种情况的唯一方法是这样做:

但是现在选项卡完成看起来很奇怪,至少可以说:

无论如何显示正常的文件选项卡完成(没有'@'前缀)但在点击选项卡时保留'@'?

0 投票
1 回答
5329 浏览

bash - 如何在不影响其他完成脚本的情况下重置 COMP_WORDBREAKS?

当我实现一个 bash 自动完成功能时,有些东西让我感到困惑,我将把它放在/etc/bash_completion.d/

为了实现某些功能,我想:从变量中删除分词字符冒号()并在开头$COMP_WORDBREAKS添加一个斜杠( ) 。/$COMP_WORDBREAKS

但是,我无法COMP_WORDBREAKS直接重置,因为该值与其他完成脚本共享。到调用完成函数时,变量COMP_WORDS数组已经被填充,因此本地更改COMP_WORDBREAKS无效。

是否有任何解决方案可以更改COMP_WORDBREAKS一个完成脚本而不影响其他脚本?

0 投票
4 回答
4784 浏览

arrays - Bash Autocompletion - 如何将此数组传递给 compgen 而不会折叠大量空白?

以下 bash 补全将一组可能的单词(即补全)传递给 compgen。

问题是数组元素中的空格没有被保留,也就是说,由于分词,“foo bar”被视为元素。有没有办法保留空白,以便显示 3 个元素,而不是 4 个?

编辑

basenames包含文件名,即几乎每个字符(除了 / 和 \0)都是允许的。

编辑 2

-W 标志需要一个单词,例如foo bar foobar. 将多个元素传递给它(这是${basenames[@]}会做的)将不起作用。

编辑 3

更改了示例 basenames 数组(因此 thefoofoofromfoo bar不会被折叠)。

使用换行符分隔单词有效:

使用\0不会:

0 投票
3 回答
11004 浏览

linux - 在 shell 中自定义选项卡完成

这可能比“自定义选项卡完成”有更好的名称,但这是场景:

通常,当我在命令行输入一个命令,然后输入两次 {TAB} 时,我会得到当前目录中所有文件和子目录的列表。例如:

但是,我注意到至少有一个程序以某种方式过滤了这个列表:wine. 考虑:

它有效地将结果过滤到*.exe.

认为它可能是某种负责过滤的包装脚本,a did awhichfilean 结果wine不是脚本而是可执行文件。

现在,我不知道这个“过滤器”是否以某种方式编码在程序本身中,或者在默认的 wine 安装期间以其他方式指定,所以我不确定这个问题是否更适合 stackoverflow 或超级用户,所以我交叉手指扔到这里。如果我猜错了,我很抱歉。(另外,我检查了一些类似的问题,但大多数都无关紧要或涉及编辑 shell 配置。)

所以我的问题是,这种“过滤”是如何完成的?提前致谢。

0 投票
3 回答
2754 浏览

bash - 带有文件名的bash自动完成

我无法使用简单的 bash 自动完成功能。我需要从预定义的目录中自动完成文件名,所以它看起来像这样:

文件来自哪里/var/log/app

0 投票
1 回答
489 浏览

bash - 带有空格和标点符号的字符串的 Bash 补全

我正在尝试编写一个 bash 完成函数,该函数适用于包含空格和标点符号的字符串,甚至引号也可能在其中。

我从文件中提取这些字符串,sed因此将它们作为多行文本,其中每一行都包含一个用于完成的目标字符串。但是,我尝试将其传递给 的所有方式compgen -W,我总是只完成单个单词。

0 投票
1 回答
466 浏览

bash - 如何激活 FULL $var 完成

在 Debians BASH 下,我可以执行以下操作:

如您所见,我可以通过按 TAB 来自动完成变量 $foo。

在 Ubuntu (11) 下,行为不一样(我在 bashrc 中激活了“/etc/bash_completion”)。

这是有效的:

这个不工作:

谁能给我一个提示,如何让最后一个工作?

0 投票
0 回答
128 浏览

tabs - 目录的macosx lion bash选项卡完成需要很长时间

在工作中,我必须等待 1s~5s 才能在 iterm2 中完成 dir。同样的mba,但在家里它可以立即生效。