% File src/library/base/man/windows/shell.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2014 R Core Team
% Distributed under GPL 2 or later

\name{shell}
\Rdversion{1.1}
\alias{shell}
\title{Invoke a System Command, using a Shell}

\usage{
shell(cmd, shell, flag = "/c", intern = FALSE, wait = TRUE,
      translate = FALSE, mustWork = FALSE, ...)
}

\arguments{
  \item{cmd}{the system command to be invoked, as a string.}
  \item{shell}{a string giving the name of the shell to be used, or
    \code{NULL} (no shell).  If missing, a suitable shell is chosen:
    see \sQuote{Details}.}
  \item{flag}{the switch to run a command under the shell.  If the shell
  is \code{bash} or \code{tcsh} or \code{sh} the default is changed to
  \code{"-c"}.}
  \item{intern}{a logical, indicates whether to make the output of the
    command an \R object.}
  \item{wait}{should the \R interpreter wait for the command to finish?
    The default is to wait, and the interpreter will always wait if
    \code{intern = TRUE}.}
  \item{translate}{If \code{TRUE}, \samp{"/"} in \code{cmd} is
    translated to \samp{"\\"}.}
  \item{mustWork}{a logical; if \code{TRUE} failure to run the command
    will give an \R error, if \code{FALSE} a warning and if \code{NA},
    no \R message.}
  \item{\dots}{additional arguments to \code{\link{system}}.}
}

\description{
  \code{shell} runs the command specified by \code{cmd}, usually under
  a shell, because that is what the POSIX standards require.
}

\value{
  If \code{intern = TRUE}, a character vector giving the output of the
  command, one line per character string, or an error message if the
  command could not be run.

  If \code{intern = FALSE}, the return value is an error code, given the
  invisible attribute (so needs to be printed explicitly).  If the
  command could not be run for any reason, the value is \code{-1} and
  an \R warning is generated.  Otherwise if \code{wait = FALSE} the value
  is the error code returned by the command, and if \code{wait = TRUE}
  it is the zero (the conventional success value),

  If \code{intern = FALSE} and \code{wait = TRUE} (the defaults) the text
  output from a command that is a console application will appear in
  the \R console (\code{Rgui}) or the window running \R (\code{Rterm}).
}

\details{
  If no \code{shell} is specified, the environment variables
  \env{R_SHELL} and \env{COMSPEC} are tried in turn: \env{COMSPEC}
  should always succeed.  Using \code{shell = NULL} invokes the command
  \code{cmd} directly, in which case an extension of \file{.exe} is
  assumed.  It is possible to use batch files directly if their
  extension is given: Windows (rather than \R) then chooses a shell.

  See \code{\link{system}} for fuller details: \code{shell} is a more
  user-friendly wrapper for \code{system}.  To make use of Windows
  file associations, use \code{\link{shell.exec}}.
}

\note{
  This function exists only on Windows: on all other platform
  \code{\link{system}} uses a shell.
}

\seealso{\code{\link{system}}, \code{\link{shell.exec}}}

\keyword{utilities}
