Ich verwende GraphViz unter Bash/Cygwin, aber beim Aufruf passiert mit der automatischen Vervollständigung der Bash-Tabs irgendwie nichts.
Beispieldateien:
myGraph.graphviz
ist die EingabedateimyGraph.graphviz.png
sollte die Ausgabedatei sein.
Der Befehl zum Erstellen der Grafik lautet
dot -T png -o myGraph.graphviz.png myGraph.graphviz
Natürlich möchte ich eingeben
Punkt -T png -o mein Tab.png meinTab
um diese Dateinamen automatisch zu vervollständigen, aber nichts passiert! Ich kann eingeben und es gibt , aber warum funktioniert es nach nicht ? Benötigt Bash ein zusätzliches Autovervollständigungsmodul für jeden Befehl, den ich eingeben könnte?cat myTab
cat myGraph.graphviz
dot
Antwort1
Ich habe die Beispieldateien in meinem Debian erstellt. Funktioniert tatsächlich nicht. Dann (nach manuellem Ausfüllen) funktioniert es auch nicht. Es gibt zwei verschiedene Probleme.dot -T png -o myTab
dot -T png -o myGraph.graphviz.png myTab
Das allgemeine Handbuchfür Graphviz-Programme gibt an:
-ooutfile
Ausgabe in Datei schreibenAusgabedatei. […]
Die Bash-Vervollständigung in meinem Debian befolgt dies wörtlich: Sie unterstützt , nicht . Selbst wenn letzteres mit funktioniert (und das weiß ich nicht), unterstützt die Vervollständigung es nicht. Sie sollten folgendermaßen vorgehen:-ooutfile
-o outfile
dot
Punkt -T png -omyTab
ohne Leerzeichen danach -o
. In meinen Tests funktioniert das oben genannte.
Um das zweite TabWerk zu machen, habe ich es inspiziert /usr/share/bash-completion/completions/dot
. Die relevante Zeile am Ende lautet:
_filedir dot
Dies bietet Ihnen Verzeichnisse zum Absteigen und Dateien zum Angeben, aber nur Dateien mit Namen, die mit .dot
oder enden .DOT
. Wahrscheinlich können SiemanuellGeben Sie eine Datei an, die diesem Muster nicht entspricht, und es wird nichts Schlimmes passieren. Wenn Sie sich jedoch auf den Vervollständigungsmechanismus verlassen, sollte der Dateiname ordnungsgemäß enden.
Eigentlich weiß ich dot
es gar nicht, ich kenne Bash-Vervollständigungen ein wenig. Vielleicht macht die Anforderung keinen Sinn und die Vervollständigung für dot
wäre hilfreicher, wenn sie es zuließebeliebigDatei. In diesem Fall kopiere ich die Originaldatei /etc/bash_completion.d/
und ändere die Kopie, so dass die Zeile
_filedir dot
am Ende der Funktion wird
_filedir
Dies ist eine systemweite Änderung. Die Änderung hat keine Auswirkungen auf bestehende Shells, also starten Sie eine neue, bash
um sie zu testen. Wenn Sie sie nicht ändern können (oder wollen), /etc/bash_completion.d/
lesen Siediese Antwort. Es bietet eine Möglichkeit, Ihre privaten (benutzerspezifischen) Daten zu haben bash_completion.d/
.
Beachten Sie, dass diese Änderung Ihnen das Eintippen ermöglicht und die Vervollständigung funktioniert. In diesem speziellen Fall hat dies jedoch nichts mit dem internen Vorgang zu tun, da es sich um die allgemeine Vervollständigung für Operanden handelt und diese auch nach einer unerwarteten oder ungültigen Option (z. B. ) funktionieren würde .dot -T png -o myTab
-o
dot -T png -: myTab
Antwort2
Dies kann passieren, wenn auf dem System ein anderer Befehl vorhanden ist, dot
für den eine echte Autovervollständigungsdefinition installiert ist, und dieser Befehl an dieser Stelle keine Datei erwartet. Für unbekannte Befehle erhalten Sie standardmäßig eine Datei-Autovervollständigung für alle Parameter, aber bestimmte Befehle können ihre eigene Autovervollständigung festlegen. Überprüfen Sie /etc/bash_completion
und /etc/bash_completion.d/
.
PS: Eine andere Erklärung ist, dass das dot
Autovervollständigungsskript nicht mit dem Dokument übereinstimmt oder dass Ihnen in Ihren Argumenten ein Fehler unterlaufen ist.