问题标签 [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.
bash - 使用 Makefile 中的通用目标进行 make 的 Bash 完成
我有一个 Makefile,我的大部分目标都是通过固定序列创建的。似乎 bash 完成只建议正常目标的完成,例如
而不是通用目标。有没有办法让 bash 完成所有目标,即使它们没有像上面的例子那样明确?更具体地说,假设我定义了一个目标名称列表,并执行以下操作:
有什么方法可以使这些目标可用于 bash 完成?或者,甚至更高级,假设我有两个列表,并且我希望目标由两个列表中元素的所有可能组合组成。我也可以将这些目标用于 bash 完成吗?
bash - 带有可变隐藏根前缀的 Tcsh 和/或 bash 目录完成
我正在尝试在 tcsh 和/或 bash 中设置目录补全(两者都在我的站点上使用),但略有不同:对于特定命令“foo”,我希望补全使用自定义函数来匹配第一个 / 分隔的术语到实际的子树节点,然后按照正常目录完成任何后续术语。它是 cdpath 和完成的组合,或者我认为是目录完成的一种形式,其中起点由完成脚本控制。它将按如下方式工作:
我们愿意这样做是因为我们有一个大型的生产开发树(这是一个 CGI 生产设施),精通 shell 的用户一直在导航和跳跃。抱怨是树的上层繁琐且多余;他们只需要快速搜索第一个术语即可找到可能的“头”选择并从那里完成目录完成。看起来可编程完成可以提供一种方法来做到这一点,但事实证明它非常难以捉摸。
我已经多次尝试自定义 bash 和 tcsh 补全来做到这一点,但我得到的最接近的是一种“单词补全”形式,其中用户必须将目录级别视为带有空格的单独单词(例如 foo scene/shot /元素/工作区/ ...)。我可以继续修改我当前的脚本——但我一直想知道是否有什么我不理解的东西——这是我第一次尝试完成程序,并且在 shell 书籍和互联网上的文档和示例非常薄. 如果有任何完成大师可以让我走上正轨,我将不胜感激。
FWIW:这是我到目前为止所得到的(首先是 tcsh,然后是 bash)。请注意,静态根 '/root/sub1/sub2/sub3' 只是搜索功能的占位符,它将在不同级别找到不同的匹配项。如果我能让它工作,我可以稍后加入搜索功能。同样,这两个示例都进行了单词补全,这要求用户在每个匹配项之后输入一个空格(我还必须删除函数中的空格来构造一个实际的路径,哎呀!)
TCSH 示例(注意该函数实际上是一个 bash 脚本):
重击示例:
bash - 编写自定义 bash 完成规则
我的目录充满了具有相同前缀的文件,我希望能够在 vim 中快速打开这些文件。例如,我可能有:
我想要的是能够在这些目录之一中并输入:
它会自动完成:
为了实现这一点,我很高兴每个目录都有一个名为“.completion”的文件,其中包含“bar_”。
我遇到的问题是我想要以下行为:
地点 | 是光标,因此如果文件匹配,则在末尾添加空格。如果我们匹配前缀,请不要添加空格。
到目前为止,我最好的是这种行为减去最后添加的空格。我尝试了各种方法,都无济于事。以下是我所拥有的:
任何关于如何让它在文件名完成后添加空格的想法,但不是在前缀完成后添加空格,将不胜感激。
arrays - 在 bash 完成的上下文中,关于 ${array[*]} 与 ${array[@]} 的混淆
我第一次尝试编写 bash 补全,我对取消引用 bash 数组 (${array[@]}
和${array[*]}
) 的两种方法有点困惑。
这是相关的代码块(顺便说一句,它可以工作,但我想更好地理解它):
bash 的文档说:
可以使用 ${name[subscript]} 引用数组的任何元素。需要大括号以避免与 shell 的文件名扩展运算符冲突。如果下标是“@”或“*”,则单词将扩展为数组名称的所有成员。只有当单词出现在双引号中时,这些下标才会有所不同。如果单词是双引号,则 ${name[*]} 扩展为单个单词,每个数组成员的值由 IFS 变量的第一个字符分隔,${name[@]} 扩展 name 的每个元素一个单独的词。
现在我想我明白这compgen -W
需要一个包含可能替代词列表的字符串,但在这种情况下,我不明白“${name[@]} 将名称的每个元素扩展为一个单独的词”是什么意思。
长话短说:${array[*]}
作品;${array[@]}
没有。我想知道为什么,我想更好地理解究竟${array[@]}
扩展成什么。
bash - 以编程方式访问特定命令的 bash 完成
我正在尝试编写一个小型命令启动器应用程序,并且想在我自己的完成系统中使用 bash 的选项卡完成。我已经能够使用compgen -abck
.
但是,我还想获得特定命令的完成:例如,输入git p
应该显示 git 命令的完成。
有什么办法可以compgen
用来做到这一点吗?如果没有,还有其他方法可以让我以编程方式获取完成列表吗?
[编辑:澄清一下,我不是想为 bash提供补全——我的应用程序是一个 GUI 命令启动器。我只是想在我自己的应用程序中使用 bash 的现有完成。]
linux - Rails 3 的 bash_completion
有没有bash_completion
为 Rails 3 准备好的脚本?
bash - 仅向用户显示 COMPREPLY bash 完成选项的子字符串
在 bash 完成脚本中,假设COMPREPLY=(aa/ba/ aa/bb/)
. 调用脚本时,完成选项对用户来说如下所示:
但是,我想对这些选项的显示方式有更多的控制。特别是,我只想向用户显示每个 COMPREPLY 选项的子字符串,类似于现在 bash 中目录完成的工作方式:
有没有办法在 bash 中做到这一点?
makefile - bash完成makefile目标
假设我有一个简单的 makefile,例如:
然后在 bash 我想要类似的东西:
制作 h <标签>
所以它可以完成
打个招呼
我找到了一种简单的方法,比如创建空文件hello
,bye
但我正在寻找更复杂的.
bash - bash 中的动态 case 语句
我试图弄清楚如何在 bash 脚本中创建动态案例语句。
例如,假设我有一个 awk 语句的输出,其内容如下
在这种情况下,输出可以随时更改。
如果此 awk 输出中包含一个值,我将尝试执行不同的逻辑。
因此,如果上面的数据在 $list 中,那么我在概念上想做类似的事情:
我正在尝试使用它来构建动态自定义选项卡完成功能(有关一些背景信息,请参见http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2)。
有任何想法吗?
谢谢。