Como adicionar / encontrar opções de um programa executável personalizado

1

Digamos que eu tenha um script simples em /usr/local/bin/myscript like

#!/bin/bash

case "" in
    start)
        start something
        ;;
    stop)
        stop something
        ;;
    status)
        status of something
        ;;
    *)
      echo "unknown option "
esac

Como e onde posso fornecer essas três opções start / stop / status para que um usuário possa exibir / preencher automaticamente as opções pressionando TAB ?

Como por exemplo apt-get + 2x Tab me dá

autoclean        check            dselect-upgrade  source
autoremove       clean            install          update
build-dep        dist-upgrade     purge            upgrade
changelog        download         remove

EDITAR

Como sugerido por @Ravexina, adicionei um arquivo em /etc/bash_completion.d/myscript_comp like

_my_script_comp ()
{
  local cur # A pointer named "cur" to current completion word.
  COMPREPLY=() # Array variable storing the possible completions.
  cur=${COMP_WORDS[COMP_CWORD]}

  # Show it for every possible combination
  # we could do "s*" to only complete words starting with "s"
  case "$cur" in
    # Generate the completion matches and load them into $COMPREPLY array.
    *)  COMPREPLY=( $( compgen -W 'start status stop' -- $cur ) );;
  esac

  return 0
}

complete -F _my_script_comp myscript

Mas quando eu digito myscript e pressiono 2x TAB agora obtenho todos os arquivos listados no diretório atual em vez de start stop status ...

    
por derHugo 30.06.2017 / 11:01

1 resposta

2

Crie um arquivo aqui:

/etc/bash_completion.d/

nomeie o que você quiser, por exemplo: myscript .

Adicione essas linhas a ele e salve-o:

_my_script_comp ()
{
  local cur # A pointer named "cur" to current completion word.
  COMPREPLY=() # Array variable storing the possible completions.
  cur=${COMP_WORDS[COMP_CWORD]}

  # Show it for every possible combination
  # we could do "s*" to only complete words starting with "s"
  case "$cur" in
    # Generate the completion matches and load them into $COMPREPLY array.
    *)  COMPREPLY=( $( compgen -W 'start status stop' -- $cur ) );;
  esac

  return 0
}

complete -F _my_script_comp script.sh

Agora você tem sua conclusão completa para /usr/local/bin/script.sh .

Minha fonte .

    
por Ravexina 30.06.2017 / 11:23