A conclusão automática do Bash não funciona após determinado comando

A conclusão automática do Bash não funciona após determinado comando

Estou usando o graphViz no bash/Cygwin, mas de alguma forma, ao chamá-lo, o preenchimento automático da guia bash não faz nada.

Arquivos de exemplo:

  • myGraph.graphvizé o arquivo de entrada
  • myGraph.graphviz.pngdeve ser o arquivo de saída.

O comando para fazer o gráfico é

dot -T png -o myGraph.graphviz.png myGraph.graphviz

Claro que quero inserir

ponto -T png -o meu Tab.png meuTab

para preencher automaticamente esses nomes de arquivos, mas nada acontece! Posso entrar e dá , mas por que não funciona depois ? O bash precisa de um módulo de preenchimento automático extra para cada comando que eu possa inserir?cat myTabcat myGraph.graphvizdot

Responder1

Criei os arquivos de exemplo no meu Debian. Na verdade, não funciona. Então (após completar manualmente) também não funciona. Existem duas questões distintas.dot -T png -o myTabdot -T png -o myGraph.graphviz.png myTab


O manual geralpara programas Graphviz especifica:

-ooutfile
Gravar saída em arquivoarquivo de saída. […]

A conclusão do Bash no meu Debian obedece literalmente: suporta , não . Mesmo que este último funcione (e eu não sei disso), a conclusão não suporta isso. Você deve proceder assim:-ooutfile-o outfiledot

ponto -T png -omyTab

sem nenhum espaço depois -o. Em meus testes, o acima funciona.


Para fazer o segundo Tabtrabalho eu inspecionei /usr/share/bash-completion/completions/dot. A linha relevante perto do final é:

_filedir dot

Isso oferecerá diretórios para descer e arquivos para especificar, mas apenas arquivos com nomes que terminam com .dotou .DOT. Provavelmente você podemanualmenteforneça um arquivo que não corresponda a esse padrão e nada de ruim acontecerá, mas se você confiar no mecanismo de conclusão, o nome do arquivo deverá terminar corretamente.

Na verdade não sei dotnada, conheço um pouco as conclusões do Bash. Talvez o requisito não faça sentido e o preenchimento dotseria mais útil se permitissequalquerarquivo. Nesse caso, copio o arquivo original /etc/bash_completion.d/e modifico a cópia, então a linha

_filedir dot

no final da função torna-se

_filedir

Esta é uma mudança em todo o sistema. A mudança não afetará os shells existentes, então inicie um novo bashpara testá-lo. Se você não pode (ou não deseja) modificar, /etc/bash_completion.d/consulteesta resposta. Ele fornece uma maneira de ter seu arquivo privado (específico do usuário) bash_completion.d/.

Observe que esta alteração permitirá que você digite e o preenchimento funcionará. Porém, neste caso específico, não tem nada a ver internamente, é a conclusão geral dos operandos e funcionaria mesmo após alguma opção inesperada ou inválida (por exemplo ).dot -T png -o myTab-odot -T png -: myTab

Responder2

Isso pode acontecer se houver outro dotcomando no sistema para o qual uma definição real de preenchimento automático esteja instalada e esse comando não esperar um arquivo nesse ponto. Você obtém o preenchimento automático de arquivos em todos os parâmetros por padrão para comandos desconhecidos, mas comandos específicos podem definir seu próprio preenchimento automático específico. Verifique /etc/bash_completione /etc/bash_completion.d/.

PS: Outra explicação é que o dotscript de preenchimento automático não é coerente com o documento ou que você cometeu um erro em seus argumentos.

informação relacionada