Como programaticamente consultar o preenchimento bash para determinada string

3

Eu quero perguntar ao bash como ele completaria uma string como se eu tivesse digitado em um shell e clicado em tab. Por exemplo, se eu digitar

ls /[TAB][TAB]

Eu vejo a lista de arquivos e dirs no / que poderia completar o comando ls. Como eu pergunto bash como seria completar 'ls /' sem digitá-lo e bater guia? Eu quero algo como:

query_complete 'partial command line string'

Eu li a man page completa e compgen, mas não consegui descobrir como fazer isso com eles.

Nota: 'ls /' não é o comando em que estou interessado, apenas um exemplo. Eu estou procurando uma solução geral para qualquer seqüência arbitrária que representa uma linha de comando parcial.

    
por Ryan McKay 04.02.2011 / 18:57

4 respostas

3

Você pode tentar:

compgen -o default /
    
por 04.02.2011 / 20:06
1

Aparentemente, o Awesome WM tem um pequeno truque para se apossar disso.

link

Mas parece que não consigo funcionar corretamente. Deixe-me saber se você tem mais sorte.

    
por 08.06.2011 / 20:55
0

Você poderia usar uma função que usa a Expansão de Parâmetros do bash, assim:

expand(){ echo ${a:+$1}; }; expand "ls /*"

Mas você precisará substituir seu [TAB] [TAB] por "*".

    
por 04.02.2011 / 21:00
-1

Eu acho que uma boa opção para você é olhar para as funções do bash que você pode escrever para o seu arquivo .bashrc. Meu palpite é que você acaba digitando comandos uma e outra vez, e você quer acelerar as coisas. Aqui está um exemplo do meu arquivo .bashrc:

newmod() {
mkdir -p ${1}/{manifests,files,templates} && \
echo "class $1" >> ${1}/manifests/init.pp && \
echo "class ${1}::conf" >> ${1}/manifests/conf.pp && \
echo "class ${1}::packages" >> ${1}/manifests/packages.pp
} 

Eu criei muitos módulos de fantoches. Esta função, quando invocada a partir do shell, faz o seguinte trabalho para mim:

[configmgr@mback-dev ~]$ newmod testmodule
[configmgr@mback-dev ~]$ tree testmodule/
testmodule/
|-- files
|-- manifests
|   |-- conf.pp
|   |-- init.pp
|   '-- packages.pp
'-- templates

3 directories, 3 files
[configmgr@mback-dev ~]$ 

Os arquivos são preenchidos com o scaffolding para a classe, os pacotes e a configuração dos módulos. Isso me poupa toneladas de digitação!

HTH, ztron

    
por 05.02.2011 / 03:11

Tags