Cover by Cameron Newham, JP Vossen, Carl Albing

Safari, the world’s most comprehensive technology and business learning platform.

Find the exact information you need to solve a problem on the fly, or go deeper to master the technologies and skills you need to succeed

Start Free Trial

No credit card required

O'Reilly logo

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 ...

Find the exact information you need to solve a problem on the fly, or go deeper to master the technologies and skills you need to succeed

Start Free Trial

No credit card required