Qual é um método simples para despejar a entrada do pipe em um arquivo?(Linux)
Pergunta
Estou procurando um pequeno script de shell que pegue qualquer coisa canalizada e despeje em um arquivo.para fins de depuração de e-mail.Alguma ideia?
Solução
O comando unix tee faz isso.
man tee
Outras dicas
cat > FILENAME
Você não está sozinho em precisar de algo semelhante...na verdade, alguém queria essa funcionalidade há décadas e desenvolveu camiseta :-)
Claro, você pode redirecionar stdout diretamente para um arquivo em qualquer shell usando o caractere >:
echo "hello, world!" > the-file.txt
O tee de ferramenta unix padrão pode fazer isso.Ele copia a entrada para a saída, ao mesmo tempo que a registra em um arquivo.
Utilize o Procmail.Procmail é seu amigo.O Procmail é feito para esse tipo de coisa.
Se você quiser analisar no script:
while /bin/true; do
read LINE
echo $LINE > $OUTPUT
done
Mas você pode simplesmente usar cat.Se cat obtiver algo no stdin, ele irá ecoar para o stdout, então você terá que canalizá-lo para cat >$OUTPUT.Estes farão o mesmo.O segundo também funciona para dados binários.
Se você quiser um script de shell, tente isto:
#!/bin/sh
exec cat >/path/to/file
Se exim ou sendmail é o que está escrito no canal, então procmail é uma boa resposta porque fornecerá bloqueio/serialização de arquivos e você poderá colocar tudo no mesmo arquivo.
Se você deseja apenas gravar um arquivo, então - tee> /tmp/log.$$ ou - cat> /tmp/log.$$ pode ser bom o suficiente.
Usar <<command>> | tee <<file>>
para canalizar um comando <<command>>
em um arquivo <<file>>
.
Isso também mostrará a saída.
Huh?Acho que não entendi a pergunta?
Você não pode simplesmente terminar seu cachimbo em um >> ~file
Por exemplo
echo "Foobar" >> /home/mo/dumpfile
anexará Foobar ao dumpfile (e criará dumpfile se necessário).Não há necessidade de um script de shell ...É isso que você estava procurando?
se você não se importa em gerar o resultado
cat - > filename
ou
cat > filename