conclusão do bash usando ls

2

Isso funciona a partir do shell:

 export files='ls /home/tests/'
 complete -o filenames -W "${files}" xtest

Este script não:

 _xtest ()   {                .
      local cur
      local files='ls /home/tests'
      COMPREPLY=()     cur=${COMP_WORDS[COMP_CWORD]}

      #case "$cur" in

        COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
    #  esac
      return 0
    }

    complete -F _xtest -o filenames xtest

Como é o uso de um script para autocompletar na lista de arquivos de um diretório? Estou usando um script porque somente para 1 opção de script (-test) é necessário o preenchimento automático personalizado, pois outras opções de script (-speed, -define) autocomplete padrão são O.K.

    
por Meir 19.10.2017 / 18:25

1 resposta

2

Declarar uma variável e atribuí-la em uma linha pode mascarar os valores de retorno. O uso de $(..) em vez de backticks legados é preferível. Dada a falta de contexto do seu código, o seguinte código é o melhor que posso fazer sem poder testá-lo.

 _xtest ()   {
      local cur
      local files
      files=$(ls /home/tests)
      COMPREPLY=()
      cur=${COMP_WORDS[COMP_CWORD]}

      case "$cur" in
      -*)
      COMPREPLY=( $( compgen -W $files --$cur ) );;
      esac
      return 0
    }

    complete -F _xtest -o filenames xtest
    
por J. Starnes 19.10.2017 / 21:28