Saving Output When Redirect Doesn’t Seem to Work
Problem
You tried using > but some (or all) of the output still appears on the screen.
For example, the compiler is producing some error messages.
$ gcc bad.c bad.c: In function `main': bad.c:3: error: `bad' undeclared (first use in this function) bad.c:3: error: (Each undeclared identifier is reported only once bad.c:3: error: for each function it appears in.) bad.c:3: error: parse error before "c" $
You wanted to capture those messages, so you tried redirecting the output:
$ gcc bad.c > save.it bad.c: In function `main': bad.c:3: error: `bad' undeclared (first use in this function) bad.c:3: error: (Each undeclared identifier is reported only once bad.c:3: error: for each function it appears in.) bad.c:3: error: parse error before "c" $
However, it doesn’t seem to have redirected anything. In fact, when you examine the file into which you were directing the output, that file is empty (zero bytes long):
$ ls -l save.it -rw-r--r-- 1 albing users 0 2005-11-13 15:30 save.it $ cat save.it $
Solution
Redirect the error output, as follows:
$ gcc bad.c 2> save.it $
The contents of save.it are now the error messages that we had seen before.
Discussion
So what’s going on here? Every process in Unix and Linux typically starts out with three open file descriptors: one for input called standard input (STDIN), one for out-put called standard output (STDOUT), and one for error messages called standard error (STDERR). It is really up to the programmer, who writes ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access