2017-05-22 1 views
1

J'ai une commande printf qui écrira un fichier mais n'imprimera pas sur stdout. Je voudrais avoir les deux afin que je puisse laisser l'utilisateur voir ce qui se passe, et en même temps, écrire un enregistrement dans un fichier journal.Comment obtenir printf pour écrire un nouveau fichier, ajouter un fichier existant et écrire sur stdout?

printf "%s\n" "This is some text" "That will be written to a file" "There will be several lines" | tee -a bin/logfile.log > bin/newfile.conf

Cette commande ajoute au fichier journal et écrit dans le nouveau fichier, mais écrit aucune sortie à l'écran :(

OS: Centos 7

Répondre

4

Il est parce que vous redirigez l'écran de sortie avec > bin/newfile.conf en plus de ce que vous faites avec tee. Il suffit de laisser tomber le > et tout ce qui après.Si vous voulez sortir à ces deux fichiers à la fois en plus de l'écran, vous pouvez utiliser tee deux fois, par exemple :

printf ... | tee -a bin/logfile.log | tee bin/newfile.conf 

qui ajoute à LogFile.log et newfile.conf remplace, et écrit également à l'écran. Utilisez ou omettez l'option -a au besoin.

Comme John1024 points out vous pouvez également utiliser tee une fois car il accepte plusieurs noms de fichiers, bien que dans ce cas -aapplies to all filenames, mais il peut être utile dans le cas où vous voulez que le comportement par rapport à append Écraser pour être le même pour tous les fichiers.

+0

J'ai en fait besoin d'aller à 2 fichiers, un en tant que nouveau fichier (fichier conf), l'autre à ajouter (fichier journal), puis-je deux fois? – bc81

+0

@ bc81 Oui, vous pouvez 'tee' deux fois, et utilisez' -a' pour ceux que vous voulez ajouter. J'ai réparé l'exemple. "tee" est comme un "tap" dans un "pipe", vous pouvez l'utiliser autant de fois que vous le souhaitez, à n'importe quel point d'une chaîne de commandes, pour exporter le flux à ce point dans un fichier. –

+0

Merci, très utile! – bc81