Я использую graphViz под bash / Cygwin, но почему-то при его вызове автозаполнение bash tab ничего не делает.
Примеры файлов:
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
решение1
Я создал файлы примеров в своем Debian. Действительно, не работает. Затем (после завершения вручную) тоже не работает. Есть две отдельные проблемы.dot -T png -o myTab
dot -T png -o myGraph.graphviz.png myTab
Общее руководстводля программ Graphviz указывается:
-ooutfile
Записать вывод в файлвыходнойфайл. […]
Автодополнение Bash в моем Debian подчиняется этому буквально: оно поддерживает , а не . Даже если последнее работает с (и я этого не знаю), автодополнение его не поддерживает. Вам следует действовать следующим образом:-ooutfile
-o outfile
dot
точка -T png -omyTab
без пробела после -o
. В моих тестах выше работает.
Чтобы сделать вторую Tabработу, я проверил /usr/share/bash-completion/completions/dot
. Соответствующая строка ближе к концу:
_filedir dot
Это предложит вам каталоги, в которые можно спуститься, и файлы, которые можно указать, но только файлы с именами, заканчивающимися на .dot
или .DOT
. Вероятно, вы можетевручнуюукажите файл, не соответствующий этому шаблону, и ничего плохого не произойдет, однако если вы полагаетесь на механизм завершения, то имя файла должно заканчиваться правильно.
На самом деле я вообще не знаю dot
, я немного знаю дополнения Bash. Может быть, требование не имеет смысла, и дополнение for dot
было бы полезнее, если бы оно позволялолюбойфайл. В таком случае я копирую исходный файл /etc/bash_completion.d/
и изменяю копию, так что строка
_filedir dot
в конце функция становится
_filedir
Это общесистемное изменение. Изменение не повлияет на существующие оболочки, поэтому запустите новую, bash
чтобы протестировать ее. Если вы не можете (или не хотите) вносить изменения, /etc/bash_completion.d/
см.этот ответ. Он предоставляет возможность иметь свой личный (специфичный для пользователя) bash_completion.d/
.
Обратите внимание, что это изменение позволит вам печатать, и автодополнение будет работать. Однако в этом конкретном случае это не имеет никакого отношения к внутреннему, это общее автодополнение для операндов, и оно будет работать даже после какой-то неожиданной или недопустимой опции (например, ).dot -T png -o myTab
-o
dot -T png -: myTab
решение2
Это может произойти, если в системе есть другая dot
команда, для которой установлено реальное определение автозаполнения, и эта команда не ожидает файл в этой точке. Вы получаете автозаполнение файла для всех параметров по умолчанию для неизвестных команд, но определенные команды могут устанавливать свое собственное определенное автозаполнение. Проверьте /etc/bash_completion
и /etc/bash_completion.d/
.
PS: Другое объяснение заключается в том, что dot
скрипт автодополнения не соответствует документу или вы допустили ошибку в своих аргументах.