GNU Info

Info Node: (emacs)Single Shell

(emacs)Single Shell


Next: Interactive Shell Up: Shell
Enter node , (file) or (file)node

Single Shell Commands
---------------------

   `M-!' (`shell-command') reads a line of text using the minibuffer
and executes it as a shell command in a subshell made just for that
command.  Standard input for the command comes from the null device.
If the shell command produces any output, the output appears either in
the echo area (if it is short), or in an Emacs buffer named `*Shell
Command Output*', which is displayed in another window but not selected
(if the output is long).

   For instance, one way to decompress a file `foo.gz' from Emacs is to
type `M-! gunzip foo.gz <RET>'.  That shell command normally creates
the file `foo' and produces no terminal output.

   A numeric argument, as in `M-1 M-!', says to insert terminal output
into the current buffer instead of a separate buffer.  It puts point
before the output, and sets the mark after the output.  For instance,
`M-1 M-! gunzip < foo.gz <RET>' would insert the uncompressed
equivalent of `foo.gz' into the current buffer.

   If the shell command line ends in `&', it runs asynchronously.  For
a synchronous shell command, `shell-command' returns the command's exit
status (0 means success), when it is called from a Lisp program.  You
do not get any status information for an asynchronous command, since it
hasn't finished yet.

   `M-|' (`shell-command-on-region') is like `M-!' but passes the
contents of the region as the standard input to the shell command,
instead of no input.  If a numeric argument is used, meaning insert the
output in the current buffer, then the old region is deleted first and
the output replaces it as the contents of the region.  It returns the
command's exit status when it is called from a Lisp program.

   One use for `M-|' is to run `uudecode'.  For instance, if the buffer
contains uuencoded text, type `C-x h M-| uudecode <RET>' to feed the
entire buffer contents to the `uudecode' program.  That program will
ignore everything except the encoded text, and will store the decoded
output into the file whose name is specified in the encoded text.

   Both `M-!' and `M-|' use `shell-file-name' to specify the shell to
use.  This variable is initialized based on your `SHELL' environment
variable when Emacs is started.  If the file name does not specify a
directory, the directories in the list `exec-path' are searched; this
list is initialized based on the environment variable `PATH' when Emacs
is started.  Your `.emacs' file can override either or both of these
default initializations.

   Both `M-!' and `M-|' wait for the shell command to complete.  To
stop waiting, type `C-g' to quit; that terminates the shell command
with the signal `SIGINT'--the same signal that `C-c' normally generates
in the shell.  Emacs waits until the command actually terminates.  If
the shell command doesn't stop (because it ignores the `SIGINT'
signal), type `C-g' again; this sends the command a `SIGKILL' signal
which is impossible to ignore.

   To specify a coding system for `M-!' or `M-|', use the command `C-x
<RET> c' immediately beforehand.  Note: Specify Coding.

   Error output from the command is normally intermixed with the regular
output.  If you set the variable `shell-command-default-error-buffer'
to a string, which is a buffer name, error output is inserted before
point in the buffer of that name.


automatically generated by info2www version 1.2.2.9