[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
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 when shell-command
returns.
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. With a numeric argument, meaning insert the output in the
current buffer, it deletes the old region and the output replaces it as the
contents of the region. It returns the command's exit status, like
M-!.
One use for M-| is to run gpg
to see what keys are in the
buffer. For instance, if the buffer contains a GPG key, type C-x h M-|
gpg <RET> to feed the entire buffer contents to the gpg
program. That program will ignore everything except the encoded keys, and
will output a list of the keys the buffer contains.
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 is relative, Emacs
searches the directories in the list exec-path
; 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, unless
you end the command with ‘&’ to make it asynchronous. 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 then 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.
Asynchronous commands ending in ‘&’ feed their output into the buffer ‘*Async Shell Command*’. Output arrives in that buffer regardless of whether it is visible in a window.
To specify a coding system for M-! or M-|, use the command C-x <RET> c immediately beforehand. Voir la section Coding Systems for Interprocess Communication.
Error output from these commands is normally intermixed with the regular
output. But if the variable shell-command-default-error-buffer
has a
string as value, and it's the name of a buffer, M-! and M-|
insert error output before point in that buffer.
[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 23 Février 2009 en utilisant texi2html 1.78.