Qual è un metodo semplice per eseguire il dump dell'input della pipe in un file?(Linux)
Domanda
Sto cercando un piccolo script di shell che prenda qualsiasi cosa convogliata al suo interno e la scarichi in un file..per scopi di debug della posta elettronica.Qualche idea?
Soluzione
Il comando unix tee fa questo.
man tee
Altri suggerimenti
cat > FILENAME
Non sei il solo ad aver bisogno di qualcosa di simile...in effetti, qualcuno voleva quella funzionalità decenni fa e la sviluppò tee :-)
Naturalmente, puoi reindirizzare stdout direttamente a un file in qualsiasi shell usando il carattere >:
echo "hello, world!" > the-file.txt
Il tool tee standard di Unix può farlo.Copia l'input nell'output, registrandolo anche in un file.
Utilizzare Procmail.Procmail è tuo amico.Procmail è fatto per questo genere di cose.
Se vuoi analizzarlo nello script:
while /bin/true; do
read LINE
echo $LINE > $OUTPUT
done
Ma puoi semplicemente usare cat.Se cat riceve qualcosa sullo stdin, lo trasmetterà allo stdout, quindi dovrai collegarlo a cat >$OUTPUT.Questi faranno lo stesso.Il secondo funziona anche per i dati binari.
Se vuoi uno script di shell, prova questo:
#!/bin/sh
exec cat >/path/to/file
Se exim o sendmail sono ciò che sta scrivendo nella pipe, allora procmail è una buona risposta perché ti fornirà il blocco/serializzazione dei file e potrai inserirli tutti nello stesso file.
Se vuoi solo scrivere in un file, allora - tee> /tmp/log.$$ o - cat> /tmp/log.$$ potrebbe essere abbastanza buono.
Utilizzo <<command>> | tee <<file>>
per trasmettere un comando <<command>>
in un file <<file>>
.
Questo mostrerà anche l'output.
Eh?Immagino di non aver capito la domanda?
Non puoi semplicemente finire la tua pipa in un... >> ~file
Per esempio
echo "Foobar" >> /home/mo/dumpfile
aggiungerà Foobar al file dump (e creerà il file dump se necessario).Non è necessario uno script di shell...È quello che stavi cercando?
se non ti interessa produrre il risultato
cat - > filename
O
cat > filename