The shell and many  UNIX commands take their input from standard  input (stdin), write output to standard  output (stdout), and write error output to standard error (stderr). By default, standard input is  connected to the terminal keyboard and standard output and error to the  terminal screen.
The way of  indicating an end-of-file on the default standard input, a terminal, is  usually <Ctrl-d>.
Redirection of I/O,  for example to a file, is accomplished by specifying the destination on the  command line using a redirection metacharacter  followed by the desired destination.   
C  Shell Family
Some of the forms  of redirection for the C shell family are:
Character  |     Action  |    
>  |     Redirect standard    output  |    
>&  |     Redirect standard    output and standard error  |    
<  |     Redirect standard    input  |    
>!  |     Redirect standard    output; overwrite file if it exists  |    
>&!  |     Redirect standard    output and standard error; overwrite file if it exists  |    
|  |     Redirect standard    output to another command (pipe)  |    
>>  |     Append standard    output  |    
>>&  |     Append standard    output and standard error  |    
The form of a  command with standard input and output redirection is:
% command  -[options] [arguments] < input file   > output file  
If you are using csh and do not have the noclobber variable set, using > and  >& to redirect output will overwrite any existing file of that name.  Setting noclobber prevents this. Using  >! and >&! always forces the file to be overwritten. Use >>  and >>& to append output to existing files.
Redirection may  fail under some circumstances: 1) if you have the variable noclobber set and you attempt to redirect  output to an existing file without forcing an overwrite, 2) if you redirect  output to a file you don't have write access to, and 3) if you redirect output  to a directory. 
Examples:   
%  who > names 
Redirect  standard output to a file named names
%  (pwd; ls -l) > out 
Redirect  output of both commands to a file named out
%  pwd; ls -l > out 
Redirect  output of ls command only to a file named out
Input redirection  can be useful, for example, if you have written a FORTRAN program which  expects input from the terminal but you want it to read from a file. In the  following example, myprog, which was written to read standard input and write  standard output, is redirected to read myin and write myout: 
% myprog < myin  > myout  
You can suppress  redirected output and/or errors by sending it to the null device, /dev/null. The example shows redirection of both  output and errors: 
% who >&  /dev/null  
To redirect  standard error and output to different files, you can use grouping: 
% (cat myfile >  myout) >& myerror    
Bourne  Shell Family
The Bourne shell  uses a different format for redirection which includes numbers. The numbers  refer to the file descriptor numbers (0 standard input, 1 standard output, 2  standard error). For example, 2> redirects file descriptor 2, or standard  error. &n is the syntax for redirecting to a specific open file. For  example 2>&1 redirects 2 (standard error) to 1 (standard output); if 1  has been redirected to a file, 2 goes there too. Other file descriptor numbers  are assigned sequentially to other open files, or can be explicitly referenced  in the shell scripts. Some of the forms of redirection for the Bourne shell  family are:   
Character  |     Action  |    
>  |     Redirect standard    output  |    
2>  |     Redirect standard    error  |    
2>&1  |     Redirect standard    error to standard output  |    
<  |     Redirect standard    input  |    
|  |     Pipe standard    output to another command  |    
>>  |     Append to    standard output  |    
2>&1|  |     Pipe standard    output and standard error to another command  |    
Note that < and  > assume standard input and output, respectively, as the default, so the  numbers 0 and 1 can be left off. The form of a command with standard input and  output redirection is:
$ command  -[options] [arguments] < input file > output file  
Redirection may  fail under some circumstances: 1) if you have the variable noclobber set and you attempt to redirect  output to an existing file without forcing an overwrite, 2) if you redirect  output to a file you don't have write access to, and 3) if you redirect output  to a directory.   
Examples: 
$  who > names 
Direct  standard output to a file named names
$  (pwd; ls -l) > out 
Direct  output of both commands to a file named out
$  pwd; ls -l > out 
Direct  output of ls command only to a file named out
Input redirection  can be useful if you have written a program which expects input from the  terminal and you want to provide it from a file. In the following example,  myprog, which was written to read standard input and write standard output, is  redirected to read myin and write myout. 
$ myprog < myin  > myout  
You can suppress  redirected output and/or error by sending it to the null device, /dev/null. The example shows redirection of  standard error only: 
$ who 2>  /dev/null  
To redirect  standard error and output to different files (note that grouping is not  necessary in Bourne shell): 
$ cat myfile >  myout 2> myerror 
A. Bash and other modern shell provides I/O  redirection facility. There are 3 default standard files (standard streams)  open:
[a] stdin - Use to get input (keyboard) i.e. data  going into a program.
[b] stdout - Use to write information (screen) 
[c] stderr - Use to write error message (screen)
Understanding  I/O streams numbers
The Unix / Linux  standard I/O streams with numbers:  
Handle  |     Name  |     Description  |    
0  |     stdin  |     Standard input  |    
1  |     stdout  |     Standard output  |    
2  |     stderr  |     Standard error  |    
Redirecting  the standard error stream to a file
The following will  redirect program error message to a file called error.log:
$ program-name  2> error.log
$ command1 2>  error.log
Redirecting  the standard error (stderr) and stdout to file
Use the following  syntax:  
$ command-name  &>file
OR
$ command >  file-name 2>&1
Another useful  example:
# find /usr/home  -name .profile 2>&1 | more
Redirect  stderr to stdout
Use the command as  follows:
$ command-name  2>&1
No comments:
Post a Comment