litecli icon indicating copy to clipboard operation
litecli copied to clipboard

When using .once -o, only last line remains

Open mjpieters opened this issue 3 years ago • 1 comments

When using .once -o ..., only the last line of the next output remains in the file once that command has completed.

That's because the write_once() function is executed for each individual output line, and each time the output file is opened with a new open(**once_file) call. Because the -o sets the file mode to "w", the output file is truncated for each line, and so all preceding output is lost.

Either the write_once() should execute once_file["mode"] = "a" so further lines are appended instead of replacing the file, or the code should be refactored to work like the tee() command and keep a reference to the opened file for re-use until unset_once_if_written() is called (which would then close the file). With that second option, you could then also drop the written_to_once_file flag variable, because the opened file object would only exist if there had been output to write.

mjpieters avatar Jul 10 '22 14:07 mjpieters

Good catch. I'll check the implementation to see if I can refactor it. Thanks for reporting the bug.

amjith avatar Jul 11 '22 00:07 amjith

Ping, is this still on your radar?

mjpieters avatar Aug 18 '23 18:08 mjpieters