Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pipe output of a command that expects file argument

I know you can pipe output of a one command to another - for example

ls -la | less

to see output of ls -la inside of less instead of terminal stdio.

But if you use a command with a parameter that saves the output to a file

command --save-to-file file.txt

Then how to pipe that to another command?

this way will not work:

command --save-to-file | less

because command will complain that you used --save-to-file without any argument (filename)

If I remember well there was something like a buffer or a temp file in ram you could put instead of file.txt so you could do something like:

command --save-to-file ram-buffer.txt && cat ram-buffer.txt

Without even creating a file on disk, it that right?

Why I need that?

Some of commands have only a basic output to the stdio and more useful type of output cannot be printed by them but only saved to file. The thing is I am not interested in saving the more useful type of output to any file at all but just to print it in terminal or pipe to chain of another commands that do the filtering etc and then eventually print the processed output.

I would not like to be responsible to crating a tmp file then delete it etc. Perfectly I would like to just use a kind of magic file (or redirection) in place of file.txt that I could pipe to another command.

It is important to me to not write any content of the output to a disk if this is possible. Just print it in terminal or pipe to other command(s).

At this moment I'm trying to capture output of PHPUnit

phpunit --log-junit log.xml

which is not a shell command but a PHP script that uses:

#!/usr/bin/env php

But I remember I used to have an example with linux command that I wanted get the output but the form of it was only available with a parameter --save-to-file outputfile.txt

Perhaps because piping/redirecting an output designed to be saved to a file is not binary safe and therefore such output can be corrupted when piped/redirected - can it be?

like image 521
Jimmix Avatar asked Jun 10 '19 18:06

Jimmix


1 Answers

Some programs have special handling for -. For example, you can tell tar to write to stdout so it can be used in a pipeline. This would create a tarball locally and untar it remotely without the tarball ever being written to disk:

tar -cf - *.txt | ssh user@host tar -C /dir/ -xf -

You can use /dev/stdout with nearly all programs, as long as they don't need a seekable file.

command --save-to-file /dev/stdout
like image 185
John Kugelman Avatar answered Oct 18 '22 05:10

John Kugelman