it-swarm-pt.tech

Como especificar um preenchimento automático personalizado para comandos específicos?

Existe uma maneira de o bash saber exatamente o que exibir ao dobrar a guia? Por exemplo, eu tenho um python script scpy que requer alguns argumentos. Por exemplo, como apt-get, se você clicar duas vezes na guia,

 autoclean build-dep limpar dselect-upgrade limpar fonte atualizar 
 autoremove verificar dist-upgrade instalar remover atualização 

Existe uma maneira de fazer isso para seus próprios scripts/programas? Preciso envolver meu script python em um script bash?

28
Falmarri

A maneira mais fácil de fazer isso é incluir um script do Shell em /etc/bash_completion.d/. A estrutura básica desse arquivo é uma função simples que executa a conclusão e a invocação de complete, que é um bash embutido. Em vez de entrar em detalhes sobre como usar complete, sugiro que você leia ma Introdução à Conclusão do Bash . A Parte 1 aborda o básico e a Parte 2 explica como você escreveria um script de conclusão.

Uma descrição mais densa da conclusão do bash pode ser encontrada na seção "Conclusão programável" de man bash (você pode digitar "/ Conclusão programável" e pressione 'n' algumas vezes para chegar lá rapidamente. Ou, se estiver com sorte, "g 2140 RETURN").

32
Steven D

Aqui está o guia básico.

Vamos ter um exemplo de script chamado admin.sh, no qual você gostaria que o preenchimento automático funcionasse.

#!/bin/bash

while [ $# -gt 0 ]; do
  arg=$1
  case $arg in
    option_1)
     # do_option_1
    ;;
    option_2)
     # do_option_1
    ;;
    shortlist)
      echo option_1 option_2 shortlist
    ;;
    *)
     echo Wrong option
    ;;
  esac
  shift
done

Observe a lista de opções. Chamar script com esta opção imprimirá todas as opções possíveis para esse script.

E aqui você tem o script de preenchimento automático:

_script()
{
  _script_commands=$(/path/to/your/script.sh shortlist)

  local cur prev
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )

  return 0
}
complete -o nospace -F _script ./admin.sh

Observe que o último argumento a ser concluído é o nome do script ao qual você deseja adicionar o preenchimento automático. Tudo que você precisa fazer é adicionar seu script de preenchimento automático ao bashrc como

source /path/to/your/autocomplete.sh

ou copie-o para /etc/bash.completion.d

Fonte: https://askubuntu.com/a/483149/24155

9
Eduardo Cuomo