Diferença entre expansão de tubulação e comando

1

Este link é relevante Qual é a diferença entre a substituição e piping para bash , mas eu não estou entendendo tudo o que está sendo dito.

Como o título diz, qual é a diferença entre o piping command1 | command2 versus os comandos de expansão command2 $(command1) ? Por exemplo

vi $(find /home | grep xyzzy)

spits resulta em vi para editar enquanto

find /home | grep xyzzy | vi

não parece funcionar para mim. Mas não estou entendendo a diferença fundamental.

Editar

Outros posts relevantes

Substituição de processos e canais

Substituição de processo e pipe

    
por RhythmInk 05.04.2018 / 04:51

2 respostas

3
A|B

executa A e B (em paralelo), e a saída padrão de A é alimentada na entrada padrão de B. No caso de

A $(B)

o shell executa primeiro B, coleta a saída padrão de B e executa A, mas para esta execução atribui a palavra individual ao vetor ARGV de A (isto é, A pode acessar essas palavras pelo mecanismo argv usual de C e outra língua).

Além do fato de que em ambos os casos dois programas A e B estão envolvidos, não vejo nada similar entre eles.

    
por 05.04.2018 / 11:47
0

O primeiro expande para vi <list_of_filenames> .

O segundo canaliza diretamente os nomes dos arquivos para vi . Presumivelmente, vi não funcionará assim. Você pode certamente canalizar o texto para vim , mas isso é interpretado como o texto a ser processado, e não o nome do arquivo em si. (Você tem que usar vim - . Veja man vim para mais informações.)

    
por 05.04.2018 / 05:45