Estoy usando GraphViz en bash/Cygwin, pero de alguna manera, cuando lo llamo, el autocompletado de la pestaña bash no hace nada.
Archivos de ejemplo:
myGraph.graphviz
es el archivo de entradamyGraph.graphviz.png
debería ser el archivo de salida.
El comando para hacer el gráfico es
dot -T png -o myGraph.graphviz.png myGraph.graphviz
Por supuesto que quiero ingresar
punto -T png -o mi Tab.png miTab
para autocompletar estos nombres de archivos, ¡pero no pasa nada! Puedo entrar y da , pero ¿por qué no funciona después ? ¿Bash necesita un módulo de autocompletar adicional para cada comando que pueda ingresar?cat myTab
cat myGraph.graphviz
dot
Respuesta1
Creé los archivos de ejemplo en mi Debian. De hecho, no funciona. Luego (después de completar manualmente) tampoco funciona. Hay dos cuestiones separadas.dot -T png -o myTab
dot -T png -o myGraph.graphviz.png myTab
el manual generalpara programas Graphviz especifica:
-ooutfile
Escribir salida en archivoarchivo. […]
La finalización de Bash en mi Debian obedece esto literalmente: admite archivos , no archivos . Incluso si este último funciona (y no lo sé), la finalización no lo admite. Deberías proceder así:-ooutfile
-o outfile
dot
punto -T png -omiTab
sin ningún espacio después -o
. En mis pruebas, lo anterior funciona.
Para hacer el segundo Tabtrabajo lo inspeccioné /usr/share/bash-completion/completions/dot
. La línea relevante cerca del final es:
_filedir dot
Esto le ofrecerá directorios a los que descender y archivos que especificar, pero sólo archivos con nombres que terminen en .dot
o .DOT
. Probablemente puedasa manoproporcione un archivo que no coincida con este patrón y no sucederá nada malo; sin embargo, si confía en el mecanismo de finalización, el nombre del archivo debería terminar correctamente.
De hecho, no sé dot
nada, conozco un poco las completaciones de Bash. Tal vez el requisito no tenga sentido y completarlo dot
sería más útil si lo permitiera.cualquierarchivo. En tal caso copio el archivo original /etc/bash_completion.d/
y modifico la copia, por lo que la línea
_filedir dot
al final de la función se convierte
_filedir
Este es un cambio que afecta a todo el sistema. El cambio no afectará a los shells existentes, así que inicie uno nuevo bash
para probarlo. Si no puede (o no quiere) modificar /etc/bash_completion.d/
, consulteesta respuesta. Proporciona una manera de tener su archivo privado (específico del usuario) bash_completion.d/
.
Tenga en cuenta que este cambio le permitirá escribir y la finalización funcionará. Sin embargo, en este caso particular, no tiene nada que ver internamente, es la finalización general de operandos y funcionaría incluso después de alguna opción inesperada o no válida (por ejemplo ).dot -T png -o myTab
-o
dot -T png -: myTab
Respuesta2
Esto puede suceder si hay otro dot
comando en el sistema para el cual está instalada una definición de autocompletar real y ese comando no espera un archivo en ese momento. Obtiene el autocompletado de archivos en todos los parámetros de forma predeterminada para comandos desconocidos, pero comandos específicos pueden establecer su propio autocompletado específico. Verifique /etc/bash_completion
y /etc/bash_completion.d/
.
PD: Otra explicación es que el dot
script de autocompletar no es coherente con el documento o que cometiste un error en tus argumentos.