Quelle est une méthode simple pour vider une entrée de canal dans un fichier? (Linux)
Question
Je cherche un petit script shell qui prend tout ce qui y est canalisé et le vide dans un fichier .. à des fins de débogage de courrier électronique. Des idées?
La solution
La commande unix tee fait cela.
man tee
Autres conseils
cat > FILENAME
Vous n'êtes pas le seul à avoir besoin de quelque chose de similaire ... en fait, quelqu'un voulait cette fonctionnalité il y a plusieurs décennies et a développé tee : -)
Bien sûr, vous pouvez rediriger stdout directement vers un fichier dans n’importe quel shell en utilisant le > caractère:
echo "hello, world!" > the-file.txt
Le t-shirt unix standard peut le faire. Il copie les entrées dans les sorties, tout en les enregistrant dans un fichier.
Utilisez Procmail. Procmail est votre ami. Procmail est fait pour ce genre de chose.
Si vous souhaitez l'analyser dans le script:
while /bin/true; do
read LINE
echo $LINE > $OUTPUT
done
Mais vous pouvez simplement utiliser un chat. Si chat obtient quelque chose sur le stdin, il sera répercuté sur la sortie standard. Vous devrez donc le diriger vers le chat & Gt; $ OUTPUT. Ceux-ci feront la même chose. Le second fonctionne également pour les données binaires.
Si vous voulez un script shell, essayez ceci:
#!/bin/sh
exec cat >/path/to/file
Si exim ou sendmail est ce qui est écrit dans le tube, procmail est une bonne réponse car il vous donnera le verrouillage / la sérialisation des fichiers et vous pouvez tout mettre dans le même fichier.
Si vous voulez juste écrire dans un fichier, alors - tee > /tmp/log.$$ ou - chat > /tmp/log.$$ pourrait être assez bon.
Utilisez <<command>> | tee <<file>>
pour canaliser une commande <<command>>
dans un fichier <<file>>
.
Ceci affichera également le résultat.
Hein? Je suppose que je ne comprends pas la question?
Ne pouvez-vous pas terminer votre pipe dans un >> ~file
Par exemple
echo "Foobar" >> /home/mo/dumpfile
ajoutera Foobar au fichier de dump (et créera un fichier de dump si nécessaire). Pas besoin d'un script shell ... Est-ce ce que vous recherchiez?
si vous ne vous souciez pas de la sortie du résultat
cat - > filename
ou
cat > filename