Como usar o completamento do comando bash para que somente os arquivos dentro de um determinado diretório sejam completados?

1

Suponha que eu tenha uma função bash specialcat que cat s um arquivo no diretório ~ / Special

specialcat () {
    cat ~/Special/$1
}

Suponha que o diretório ~ / Special foi configurado da seguinte forma:

mkdir ~/Special
echo This is the first special file > ~/Special/firstfile
echo This is the second special file > ~/Special/secondfile

A função specialcat é usada como:

> specialcat firstfile
This is the first special file

Eu quero ativar a conclusão do argumento para que

> specialcat firstf[TAB]

produz

> specialcat firstfile

, independentemente de qual seja o diretório de trabalho atual e de quais arquivos estão lá.

Esta é minha tentativa até agora

_options_specialcat () {
    COMPREPLY=( $(compgen -W "$(ls ~/Special)") )
}

complete -F _options_specialcat specialcat

que leva a

> specialcat firstf[TAB]
firstfile   secondfile  
> specialcat firstf

Ou seja, pressionar a tecla tab em um nome de arquivo parcial exibirá a lista de arquivos, mas não concluirá o comando.

Como altero minha função _options_specialcat para produzir o comportamento desejado?

    
por Nathan FD 01.07.2016 / 04:36

1 resposta

1

Você precisa filtrar a lista pelo argumento atual, então:

COMPREPLY=( $(compgen -W "$(ls ~/Special)" -- "$2") )
    
por 01.07.2016 / 15:48