10/29/11

Standard Input and Output Redirection

    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:

Quick HTTP to HTTPS - Apache2

There are several methods for redirecting your Apache-based website visitors who might type your servers URL using the plain (non-secure) HT...