O ponto-chave a ser lembrado é que pipes são dispositivos de comunicação entre processos que permitem dois processos (e isso é o que os comandos realmente são) para trocar dados, enquanto os operadores de redirecionamento são para manipular gravações de processos específicos.
No vídeo Unix Pipeline , o criador da linguagem awk
e uma das pessoas originais que trabalharam no AT & T Unix Brian Kernighan explica:
Como você pode ver, dentro do contexto em que os pipelines foram criados, eles na verdade não eram apenas dispositivos de comunicação, mas também economizam espaço de armazenamento e simplificam o desenvolvimento. Claro, podemos usar o redirecionamento de saída / entrada para tudo (especialmente hoje em dia com a capacidade de armazenamento no intervalo de terabytes), porém isso seria ineficiente do ponto de vista de armazenamento e também velocidade de processamento - lembre-se de que você está alimentando diretamente a saída de um comando para outro com |
. Considere algo como command1 | grep 'something'
. Se você escrever a saída de command1
primeiro em um arquivo, levará algum tempo para escrever tudo e, em seguida, deixar grep
percorrer todo o arquivo. Com o pipeline e o fato de que a saída é armazenada em buffer (o que significa que o processo do lado esquerdo faz uma pausa antes que o processo do lado direito esteja pronto para ser lido novamente), a saída vai diretamente de um comando para outro, economizando tempo.
Vale a pena notar que, para a comunicação entre processos, há um caso de uso de pipes nomeados , ao qual você pode usar o operador >
para escrever a partir de um comando e <
para permitir que outro comando seja lido, e é um caso de uso em que você deseja ter um destino particular no sistema de arquivos onde vários scripts / comandos podem gravar e concordar esse destino específico. Mas quando é desnecessário, o pipe anônimo |
é tudo o que você realmente precisa.