# cat

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           cat — concatenate and print files
    


## SYNOPSIS



           cat **[** -u**] [**_file_...**]**
    


## DESCRIPTION



           The _cat_ utility shall read files in sequence and shall write their
           contents to the standard output in the same sequence.
    


## OPTIONS



           The _cat_ utility shall conform to the Base Definitions volume of
           POSIX.1‐2017, _Section 12.2_ , _Utility Syntax Guidelines_.
    
           The following option shall be supported:
    
           **-u** Write bytes from the input file to the standard output
                     without delay as each is read.
    


## OPERANDS



           The following operand shall be supported:
    
           _file_      A pathname of an input file. If no _file_ operands are
                     specified, the standard input shall be used. If a _file_
                     is **'-'** , the _cat_ utility shall read from the standard
                     input at that point in the sequence. The _cat_ utility
                     shall not close and reopen standard input when it is
                     referenced in this way, but shall accept multiple
                     occurrences of **'-'** as a _file_ operand.
    


## STDIN



           The standard input shall be used only if no _file_ operands are
           specified, or if a _file_ operand is **'-'**.  See the INPUT FILES
           section.
    


## INPUT FILES



           The input files can be any file type.
    


## ENVIRONMENT VARIABLES



           The following environment variables shall affect the execution of
           _cat_ :
    
           _LANG_      Provide a default value for the internationalization
                     variables that are unset or null. (See the Base
                     Definitions volume of POSIX.1‐2017, _Section 8.2_ ,
                     _Internationalization Variables_ for the precedence of
                     internationalization variables used to determine the
                     values of locale categories.)
    
           _LC_ALL_    If set to a non-empty string value, override the values
                     of all the other internationalization variables.
    
           _LC_CTYPE_  Determine the locale for the interpretation of sequences
                     of bytes of text data as characters (for example,
                     single-byte as opposed to multi-byte characters in
                     arguments).
    
           _LC_MESSAGES_
                     Determine the locale that should be used to affect the
                     format and contents of diagnostic messages written to
                     standard error.
    
           _NLSPATH_   Determine the location of message catalogs for the
                     processing of _LC_MESSAGES_.
    


## ASYNCHRONOUS EVENTS



           Default.
    


## STDOUT



           The standard output shall contain the sequence of bytes read from
           the input files. Nothing else shall be written to the standard
           output.  If the standard output is a regular file, and is the same
           file as any of the input file operands, the implementation may
           treat this as an error.
    


## STDERR



           The standard error shall be used only for diagnostic messages.
    


## OUTPUT FILES



           None.
    


## EXTENDED DESCRIPTION



           None.
    


## EXIT STATUS



           The following exit values shall be returned:
    
            0    All input files were output successfully.
    
           >0    An error occurred.
    


## CONSEQUENCES OF ERRORS



           Default.
    
           _The following sections are informative._
    


## APPLICATION USAGE



           The **-u** option has value in prototyping non-blocking reads from
           FIFOs. The intent is to support the following sequence:
    
               mkfifo foo
               cat -u foo > /dev/tty13 &
               cat -u > foo
    
           It is unspecified whether standard output is or is not buffered in
           the default case. This is sometimes of interest when standard
           output is associated with a terminal, since buffering may delay
           the output. The presence of the **-u** option guarantees that
           unbuffered I/O is available. It is implementation-defined whether
           the _cat_ utility buffers output if the **-u** option is not specified.
           Traditionally, the **-u** option is implemented using the equivalent
           of the _setvbuf_() function defined in the System Interfaces volume
           of POSIX.1‐2017.
    


## EXAMPLES



           The following command:
    
               cat myfile
    
           writes the contents of the file **myfile** to standard output.
    
           The following command:
    
               cat doc1 doc2 > doc.all
    
           concatenates the files **doc1** and **doc2** and writes the result to
           **doc.all**.
    
           Because of the shell language mechanism used to perform output
           redirection, a command such as this:
    
               cat doc doc.end > doc
    
           causes the original data in **doc** to be lost before _cat_ even begins
           execution. This is true whether the _cat_ command fails with an
           error or silently succeeds (the specification allows both
           behaviors). In order to append the contents of **doc.end** without
           losing the original contents of **doc** , this command should be used
           instead:
    
               cat doc.end >> doc
    
           The command:
    
               cat start - middle - end > file
    
           when standard input is a terminal, gets two arbitrary pieces of
           input from the terminal with a single invocation of _cat_.  Note,
           however, that if standard input is a regular file, this would be
           equivalent to the command:
    
               cat start - middle /dev/null end > file
    
           because the entire contents of the file would be consumed by _cat_
           the first time **'-'** was used as a _file_ operand and an end-of-file
           condition would be detected immediately when **'-'** was referenced
           the second time.
    


## RATIONALE



           Historical versions of the _cat_ utility include the **-e** , **-t** , and **-v** ,
           options which permit the ends of lines, <tab> characters, and
           invisible characters, respectively, to be rendered visible in the
           output. The standard developers omitted these options because they
           provide too fine a degree of control over what is made visible,
           and similar output can be obtained using a command such as:
    
               sed -n l pathname
    
           The latter also has the advantage that its output is unambiguous,
           whereas the output of historical _cat_ **-etv** is not.
    
           The **-s** option was omitted because it corresponds to different
           functions in BSD and System V-based systems. The BSD **-s** option to
           squeeze blank lines can be accomplished by the shell script shown
           in the following example:
    
               sed -n '
               # Write non-empty lines.
               /./   {
                     p
                     d
                     }
               # Write a single empty line, then look for more empty lines.
               /^$/  p
               # Get next line, discard the held <newline> (empty line),
               # and look for more empty lines.
               :Empty
               /^$/  {
                     N
                     s/.//
                     b Empty
                     }
               # Write the non-empty line before going back to search
               # for the first in a set of empty lines.
                     p
               '
    
           The System V **-s** option to silence error messages can be
           accomplished by redirecting the standard error. Note that the BSD
           documentation for _cat_ uses the term ``blank line'' to mean the
           same as the POSIX ``empty line'': a line consisting only of a
           <newline>.
    
           The BSD **-n** option was omitted because similar functionality can be
           obtained from the **-n** option of the _pr_ utility.
    


## FUTURE DIRECTIONS



           None.
    


* * *