Usando stdout
e stdin
podemos conectar programas e gravar em arquivos arbitrários. Esse nível de desacoplamento
simplifica a alteração de parte do processo e até permite que programas escritos em diferentes linguagens de programação sejam usados
em um único processo.
É importante não usar stdout
e stdin
para outros tipos de saída, como progresso e erros. Escreva isso para stderr
.
Redirecionamento de saída
Gravar no arquivo
O >
operador de redirecionamento grava tudo o que é gravado stdout
em um arquivo.
./fetch > rawdata.json
Ler do arquivo
O <
operador de redirecionamento lerá um arquivo e o transmitirá para stdin
.
./process < rawdata.json
Combinando leitura e escrita
Você pode combinar o operador >
e <
, mas não pode usá-lo para modificar um arquivo.
./process < rawdata.json > data.json
Tubo
Stream tendo fetch
é escrito stdout
e process
é lido stdin
.
./fetch | ./process
Você pode redirecionar a saída de process
para um arquivo
./fetch | ./process > data.json
ou canalize-o para outro processo.
./fetch | ./process | ./store
tee
O programa bash tee
pode ser usado para fazer várias coisas com a saída de um processo.
Encanar e armazenar
Você pode especificar um arquivo para salvar os dados, enquanto mantém seu pipeline.
./fetch | ./process | tee data.json | ./store
Canalize para vários processos
tee
também pode ser usado para criar uma subpipeline.
./fetch | ./process | tee >(./fetch-images | ./store-images) | ./store-data
Transmita pela rede
Podemos usar streams de soquetes TCP simples para canalizar dados para outro servidor. Isso permite dividir o processo entre máquinas.
No servidor B ( 192.168.0.101 ) ouça a porta 9000 e transmita para process
e store
.
nc -l 9000 | ./process | ./store
No servidor A, buscamos e gravamos o conteúdo na porta 9000 do servidor B.
./fetch > /dev/tcp/192.168.0.101/9000