我在 bash / Cygwin 下使用 graphViz,但是在调用它时,bash 选项卡自动完成不会做任何事情。
示例文件:
myGraph.graphviz
是输入文件myGraph.graphviz.png
应该是输出文件。
制作图形的命令是
dot -T png -o myGraph.graphviz.png myGraph.graphviz
我当然想输入
点 -T png -o 我的Tab.png 我的Tab
自动完成这些文件名,但没有任何反应!我可以进入并且它给出,但是为什么它之后不起作用?对于我可以输入的每个命令,bash 是否需要一个额外的自动完成模块?cat myTab
cat myGraph.graphviz
dot
我在我的 Debian 中创建了示例文件。确实,行不通。然后(手动完成后)也不起作用。有两个不同的问题。
dot -T png -o myTab
dot -T png -o myGraph.graphviz.png myTab
Graphviz 程序的通用手册指定:
我的 Debian 中的 Bash 补全从字面上遵守了这一点:它支持,而不是. 即使后者适用(我不知道这一点),完成也不支持它。你应该这样进行:
-ooutfile
-o outfile
dot
之后没有任何空格
-o
。在我的测试中,上述工作。为了进行Tab我检查的第二项工作
/usr/share/bash-completion/completions/dot
。接近尾声的相关行是:这将为您提供要进入的目录和要指定的文件,但仅提供名称以
.dot
or结尾的文件.DOT
。可能您可以手动提供与此模式不匹配的文件,并且不会发生任何不好的事情,但是如果您依赖完成机制,那么文件名应该正确结束。其实我一点也不知道
dot
,我对 Bash 的补全有点了解。也许这个要求没有意义,如果允许任何文件,完成 fordot
会更有帮助。在这种情况下,我将原始文件复制到并修改副本,因此该行/etc/bash_completion.d/
在函数的末尾变成
这是一个系统范围的变化。更改不会影响现有的 shell,因此请启动一个新的 shell
bash
来测试它。如果您不能(或不想)修改/etc/bash_completion.d/
,请查看此答案。它提供了一种让您的私有(特定于用户)的方法bash_completion.d/
。请注意,此更改将允许您键入并且完成将起作用。但是在这种特殊情况下,它与内部无关,它是操作数的一般完成,即使在一些意外或无效的选项(例如)之后它也会起作用。
dot -T png -o myTab
-o
dot -T png -: myTab
如果
dot
系统上有另一个命令安装了真正的自动完成定义,并且该命令此时不需要文件,则可能会发生这种情况。默认情况下,未知命令的所有参数都会自动完成文件,但特定命令可以设置自己的特定自动完成。检查/etc/bash_completion
和/etc/bash_completion.d/
。PS:另一种解释是
dot
自动完成脚本与文档不一致,或者您的论点有误。