Die automatische Bash-Vervollständigung funktioniert nach bestimmten Befehlen nicht

Die automatische Bash-Vervollständigung funktioniert nach bestimmten Befehlen nicht

Ich verwende GraphViz unter Bash/Cygwin, aber beim Aufruf passiert mit der automatischen Vervollständigung der Bash-Tabs irgendwie nichts.

Beispieldateien:

  • myGraph.graphvizist die Eingabedatei
  • myGraph.graphviz.pngsollte 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 myTabcat myGraph.graphvizdot

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 myTabdot -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 outfiledot

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 .dotoder 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 dotes gar nicht, ich kenne Bash-Vervollständigungen ein wenig. Vielleicht macht die Anforderung keinen Sinn und die Vervollständigung für dotwä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, bashum 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-odot -T png -: myTab

Antwort2

Dies kann passieren, wenn auf dem System ein anderer Befehl vorhanden ist, dotfü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_completionund /etc/bash_completion.d/.

PS: Eine andere Erklärung ist, dass das dotAutovervollständigungsskript nicht mit dem Dokument übereinstimmt oder dass Ihnen in Ihren Argumenten ein Fehler unterlaufen ist.

verwandte Informationen