\HeaderA{system}{Invoke a System Command}{system}
\aliasA{unix}{system}{unix}
\keyword{interface}{system}
\keyword{file}{system}
\keyword{utilities}{system}
\begin{Description}\relax
\code{system} invokes the OS command specified by \code{command}.
\end{Description}
\begin{Usage}
\begin{verbatim}
system(command, intern = FALSE, ignore.stderr = FALSE)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{command}] the system command to be invoked, as a string.
\item[\code{intern}] a logical (not \code{NA}) which indicates whether to 
make the output of the command an \R{} object.  Not available unless
\code{popen} is supported on the platform.
\item[\code{ignore.stderr}] a logical indicating whether error messages (written
to \file{stderr}) should be ignored.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
If \code{intern} is \code{TRUE} then \code{popen} is used to invoke the
command and the output collected, line by line, into an \R{}
\code{\LinkA{character}{character}} vector which is returned as the value of
\code{system}.  Output lines of more than 8095 characters will be split.

If \code{intern} is \code{FALSE} then the C function \code{system}
is used to invoke the command and the value returned by \code{system}
is the exit status of this function.

Error messages written to \file{stderr} will be sent by the shell to
the terminal unless \code{ignore.stderr = TRUE}.  They can be captured
(in the most likely shells) by
\begin{alltt}
    system("some command 2>\&1", intern=TRUE)
\end{alltt}

\code{unix} is a \emph{deprecated} alternative, available for
backwards compatibility.
\end{Details}
\begin{Value}
If \code{intern = TRUE}, a character vector giving the output of the
command, one line per character string.  If the command could not be
run or gives an error this will be reported on the shell's
\file{stderr} (unless \code{popen} is not supported, when there is an \R{}
error).  (Output lines of more than 8095 characters will be split.)

If \code{intern = FALSE}, the return value is a system error code
(\code{0} for success).
\end{Value}
\begin{SeeAlso}\relax
\code{\LinkA{.Platform}{.Platform}} for platform specific variables.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
# list all files in the current directory using the -F flag
## Not run: system("ls -F")

# t1 is a character vector, each one
# representing a separate line of output from who
# (if the platform has popen and who)
t1 <- try(system("who", TRUE))

try(system("ls fizzlipuzzli", TRUE, TRUE))
# empty since file doesn't exist
\end{ExampleCode}
\end{Examples}

