Alternativa para o operador | (pipe)

4

Estou procurando uma alternativa para o operador | no shell bash para redirecionar a saída do comando como entrada para o próximo comando. Existe alguma alternativa?

algo como:

command1 | command2 | command3

com alternativa para:

command1 X command2 X command3

X será usado no lugar de | . É possível evitar o uso de | e substituí-lo pelo operador real disso?

    
por αғsнιη 22.12.2014 / 17:37

1 resposta

8

O equivalente a command1 | command2 é command2 < <(command1)

Isso pode ser estendido para três (ou mais) comandos também.

command3 < <(command2 < <(command1))

$ lspci | grep 'Network'
 02:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

$ grep 'Network' <(lspci)
 02:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

$ lspci | grep 'Network' | grep -o 'controller'
 controller

$ grep -o 'controller' < <(grep 'Network' < <(lspci))
 controller

No entanto, como Oli sugeriu, embora isso possa produzir a mesma saída, não é tecnicamente o mesmo que um pipe.

  

& lt; (..) transforma o STDOUT da saída do comando interno em um manipulador de arquivos   (que o comando, grep no seu exemplo) é aberto. Quando você canaliza, o   comando de leitura está lendo diretamente do STDIN (que está sendo preenchido   com o STDOUT do comando canalizado). Diferenças sutis, mas podem ser   significativo com comandos que só sabem ler STDIN.

    
por Rohith Madhavan 22.12.2014 / 17:39

Tags