Monday, March 03, 2003

General: Redirecting Std err

Most Java Programmers I know are unaware of how to redirect Stderr to a file. Here is a 1 minute tutorial on the same. For both Unix and Windows:

When writing shell scripts, you can control input/output redirection. Input redirection is the ability to force a command to read any necessary input from a file instead of from the keyboard. Output redirection is the ability to send the output from a command into a file or pipe instead of to the screen.
Each process created by a shell script begins with three file descriptors associated with it:

0 stdin
1 stdout
2 stderr


You can use the file descriptor numbers 0 (standard input), 1 (standard output), and 2 (standard error) together with the redirection metacharacters to control input and output in the Bourne and Korn shells.

Bourne and Korn Shell Redirection
DescriptionCommand
Take STDIN from file<file, or 0<file
Redirect STDOUT to file> file, or 1>file
Redirect STDERR to file2> file
Append STDOUT to end of file>> file
Redirect STDERR to STDOUT2>&1
Pipe standard output of cmd1 as standard input to cmd2cmd1 | cmd2
Use file as both STDIN and STDOUT<> file
Close STDIN<&-
Close STDOUT>&-
Close STDERR2>&-

When redirecting STDIN and STDOUT in the Bourne and Korn shells, you can omit the file descriptors 0 and 1 from the redirection symbols. You must always use the file descriptor 2 with the redirection symbol.


The 0 and 1 file descriptors are implied, and not used explicitly for the C shell. The C shell representation for standard error (2) is an ampersand (&). STDERR can only be redirected when redirecting STDOUT.

C Shell Redirection Metacharacters
DescriptionCommand
Redirect STDOUT to file> file
Take input from file< file
Append STDOUT to end of file>> file
Redirect STDOUT and STDERR to file>& file
Append STDOUT and STDERR to file>>& file


For windows:
The command shell provides facilities to change the default stream input and output. These facilities are accessed by placing special command redirection symbols in a command.
Windows Command Redirection Symbols
Symbol
Description
>file

Redirects command output to the file specified. You can also use a standard device name such as LPT1, CON, PRN or CONOUT$ as the file name. Any preexisting contents of the file are lost.

>>file

Redirects command output to the file specified. If the file already exists, all command output is appended to the end of the file.

<file

Redirects command input from the file specified. You can also use a standard device name such as CON or CONIN$.

2>file

Redirects command error output to the file specified. You can also use a standard device name such as LPT1, CON, PRN or CONOUT$ as the file name. Any preexisting contents of the file are lost.

2>&1

Redirects command error output to the same location as command output. This makes any command output redirection also apply to command error output.

cmd1 | cmd2

Pipes the command output of cmd1 to the command input of cmd2. Multiple pipe characters are allowed, creating a chain of commands, each sending output to the next command in the chain.


No comments: