bc81
bc81

Reputation: 187

How to get printf to write a new file, append an existing file, and write to stdout?

I have a printf command that will write a file but won't print to stdout. I would like to have both so I can let the user see what's happening, and at the same time, write a record to a log file.

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

That command appends to the log file and writes to the new file, but writes no output to the screen :(

OS: Centos 7

Upvotes: 4

Views: 3769

Answers (1)

Jason C
Jason C

Reputation: 40336

It's because you're redirecting the screen output with > bin/newfile.conf in addition to what you're doing with tee. Just drop the > and everything after it. If you want to output to both of those files at once in addition to the screen, you can use tee twice, e.g.:

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

That appends to logfile.log and overwrites newfile.conf, and also writes out to the screen. Use or omit the -a option as needed.

As John1024 points out you can also use tee once since it accepts multiple filenames, although in that case -a applies to all filenames, but it can be useful in the case where you want the append vs. overwrite behavior to be the same for all files.

Upvotes: 5

Related Questions