2015-08-23 2 views
1

J'ai quelque chose comme mycommand | tee -a mylogfile.log mais parce que le fichier journal réside sur un disque qui pourrait être remonté encore et encore, je veux tee ouvrir/fermer le fichier avec chaque écriture (disons, par exemple, avec chaque ligne). Y a-t-il un moyen d'accomplir quelque chose comme ça?Vous cherchez quelque chose comme "tee" mais qui ouvre/ferme le fichier cible avec chaque écriture?

+1

vous juste besoin d'un script séparé pour cela. Cependant, pourquoi auriez-vous votre disque continuer à remonter? – HuStmpHrrr

+0

Un avantage de garder le fichier ouvert est qu'il empêchera votre système de remonter sur le disque (ou, plus précisément, de le démonter - le périphérique sera occupé). –

+0

La raison du remontage est qu'il s'agit d'un lecteur partagé VirtualBox, et je suis en train de prendre en compte la possibilité que la VM soit suspendue/reprise pendant que ma commande est en cours d'exécution. – marius

Répondre

1

Cela ouvrira et à proximité mylogfile.log chaque ligne:

mycommand | while IFS= read -r line; do printf "%s\n" "$line" | tee -a mylogfile.log; done 

Avec bash, cela peut être un peu simplifié:

mycommand | while IFS= read -r line; do tee -a mylogfile.log <<<"$line"; done 
+0

Fonctionne magnifiquement et succinct, merci! – marius

+1

Vous pouvez aussi simplement faire: 'echo" $ line "; echo "$ line" >> mylogfile.log; 'dans le corps de la boucle, ce qui signifie que moins de fichiers exécutables sont lancés, etc. –