I am trying to redirect all output from a command line programme to a file. I am using Bash. Some of the output is directed to a the file, but some still appears in the terminal and is not stored to the file.
Similar symptoms are described here:
However I have tried the proposed solution (capture stderr) without success:
<cmd> <args> > stdout.txt 2> stderr.txt
The file stderr.txt is created but is empty.
A possible clue is that the command-line programme is a client communicating with a server on the same machine. It may be that some of the output is coming from the server.
Is there a way to capture all the output from the terminal, irrespective of its origin?
EDIT:
I've confirmed that the missing output is generated by the server. Running the command in a separate terminal causes some output in both terminals, I can pipe all the output from the command terminal to a file. This raises issues about how to capture the server output, but that's a different question.
You can execute a subshell and redirect all output while still putting the process in the background:
( ./script.sh blah > ~/log/blah.log 2>&1 ) &
echo $! > ~/pids/blah.pid
I had trouble with a crashing program *cough PHP cough* Upon crash the shell it was ran in reports the crash reason, Segmentation fault (core dumped)
To avoid this output not getting logged, the command can be run in a subshell that will capture and direct these kind of output:
sh -c 'your_command' > your_stdout.log 2> your_stderr.err
# or
sh -c 'your_command' > your_stdout.log 2>&1
you can use this syntax to redirect all output stderr and stdout to stdout.txt
<cmd> <args> > allout.txt 2>&1
Though not POSIX, bash 4 has the &>
operator:
command &> alloutput.txt
Proper answer is here: http://scratching.psybermonkey.net/2011/02/ssh-how-to-pipe-output-from-local-to.html
your_command | ssh username@server "cat > filename.txt"
Source: Stackoverflow.com