Fonte de vários arquivos via conclusão do nome do arquivo shell

2

Estou tentando ativar o preenchimento automático de meus comandos homebrew. O Homebrew cria automaticamente a pasta bash_completion.d e sym-liga todos os arquivos de conclusão.

$ ls -a 'brew --prefix'/etc/bash_completion.d/
.  ..  brew_bash_completion.sh  git-completion.bash

Como você pode ver, tenho conclusões para brew e git . Então eu tento rodar os arquivos:

[ -d 'brew --prefix'/etc/bash_completion.d ] && source 'brew --prefix'/etc/bash_completion.d/*

Isso está no meu ~/.bash_profile e estou esperando que ele forneça todos os arquivos em bash_completion.d . Quando eu testar mais tarde no terminal, apenas a conclusão do brew funciona.

Há algo que me falta?

    
por Johan Lindskogen 03.08.2012 / 12:30

1 resposta

2

O source ajuda a escapar desse mistério:

source: source filename [arguments]
    Read and execute commands from FILENAME and return.  The pathnames
    in $PATH are used to find the directory containing FILENAME.  If any
    ARGUMENTS are supplied, they become the positional parameters when
    FILENAME is executed.

o que significa que quando você alimenta uma lista de nomes de arquivos gerados através de um glob, apenas o primeiro é originado, enquanto todos os nomes de arquivos depois são considerados seus argumentos. Para obter todos os arquivos em seu diretório de conclusão, você precisará fazer um loop, isto é,

for f in "$(brew --prefix)"/etc/bash_completion.d/*; do source "$f"; done

No entanto , à medida que você usa a conclusão do bash de homebrew, há uma maneira muito melhor: simplesmente

source "$(brew --prefix)"/etc/bash_completion

que se encarregará de pesquisar qualquer coisa encontrada nos diretórios de conclusão pertinentes, ao mesmo tempo em que adicionará uma infinidade de conclusões úteis por si só.

    
por 03.08.2012 / 18:19