Bash: Obtendo a saída de um comando de forma programática (por exemplo, em uma variável)
Como explorar a conclusão de outro comando programaticamente?
Supondo que meu diretório atual tenha arquivosa1
, a2
ea3
, como posso fazer meu comando chamar o preenchimento automático dels a
voltara1 a2 a3
?
Isso é possível?
Esclarecimento e justificativa:
Eu escolhils
porque as pessoas podem se relacionar com isso. É um exemplo artificial, mas deixe-me tentar exemplificar o valor desse recurso. Eu tenho um comando chamadobuild
que, dado um diretório, pode ser preenchido automaticamente com os destinos que podem ser criados nesse diretório. Esses destinos podem não corresponder aos arquivos desse diretório. Os alvos podem ser extraídos pelobuild
comando de um arquivo de compilação que eu não quero analisar. Em outras palavras:
build path/to/dir/
ABAABA
Pode dar:
path/to/dir/a_target
path/to/dir/b_target
build
é um comando preexistente, não algo que eu possa seguir em frente e modificar para atender aos meus propósitos. E a maneira pela qual extrai suas metas é algo que certamente não quero saber.
Agora, suponha que eu tenha um repositório inteiro debuild
projetos viáveis e a maior parte do meu trabalho e, portanto, a maior parte do meubuild
o trabalho acontece em apenas um projeto. Em outras palavras, eu semprebuild
algum alvo sobmy/project/directory
.
Por enquanto, tudo bem.
Então, eu quero escrever um wrapper em torno do comando build que não exija que eu alimente o caminho do diretório cada vez que o executo. Quero que ele conheça meu diretório de projeto preferido (ou diretórios, por que não) e deixe-me fazer referência aos destinos sem qualificá-los:
Então, sob a suposição de que eu tenho:
my/project/directory/a_target
my/project/directoryb_target
Eu quero isso:
mybuild
ABAABA
para me dar:
a_target
b_target
Claro que vou precisar escrever um código de conclusão paramybuild
, mas quero contar com a conclusão parabuild
, porque não posso simplesmente pedir aos desenvolvedores debuild
codificar umbuild listtargets
comando apenas para me fazer feliz. Esse recurso já está lá, na conclusão debuild
, e preciso usá-lo.
(Claro, quando eu corromybuild a_target
, saberá executarbuild my/project/directory/a_target
e que eu sei implementar e não está no escopo desta pergunta.)
Espero que isso ilustre por que preciso aproveitar a conclusão dobuild
comando e use-o como uma caixa preta.