Redirecionando vários comandos como entrada

3

Qual é a maneira correta de redirecionar a saída de vários comandos como entrada para outro comando?

por exemplo,

$ command < (command2 | grep pattern)
    
por tkf144 28.04.2013 / 10:33

2 respostas

4

(Refere-se a bash em caso de dúvida)

A saída de um comando ou de um pipeline pode ser a entrada de outro comando criando um pipeline (ou estendendo o existente):

command1 | command2
command1 | command2 | command3

Vários comandos (incluindo pipelines) podem ser combinados com um subshell ou uma lista (comando de grupo). Essa combinação se torna a primeira parte do pipeline então:

(command1; command2 | command3; command4) | command5
{command1; command2 | command3; command4;} | command5 # note the ; before }

Outra possibilidade é uma "string aqui" (ou até mesmo um "documento aqui"):

command2 <<< $(command1)

command2 <<EOT
First input line
$(command1)
Last input line
EOT

Outros casos

Substituição de comando é usada quando a saída deve fazer parte de uma linha de comando, ou seja, se um comando deve ver a saída de outro como seu próprio parâmetro:

echo $(date)

echo vê a saída de date como seu parâmetro; como se tivesse sido digitado na linha de comando.

A substituição de processos faz com que a saída de outro processo apareça como o conteúdo de um arquivo (não-pesquisável) fornecido como parâmetro na linha de comando.

grep bar <(echo $'foo\nbar\nbaz')

parece ser do tipo

echo $'foo\nbar\nbaz' > /path/to/file
grep bar /path/to/file
    
por 28.04.2013 / 12:06
-2

Você precisa executar os comandos usando a sintaxe substituição de comandos .

$ command < $(command2 | grep pattern)
    
por 28.04.2013 / 10:42