@settitle Eshell: The Emacs Shell
@defindex cm
@synindex vr fn
+@documentencoding UTF-8
@c %**end of header
@copying
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
-Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
and with the Back-Cover Texts as in (a) below. A copy of the license
is included in the section entitled ``GNU Free Documentation License''.
Eshell is a shell-like command interpreter implemented in Emacs Lisp.
It invokes no external processes except for those requested by the
-user. It is intended to be an alternative to the @xref{Lisp
-Interaction, IELM, , elisp, The Emacs Lisp Reference Manual} REPL for
-Emacs @emph{and} with an interface similar to command shells such as
-@command{bash}, @command{zsh}, @command{rc}, or @command{4dos}.
+user. It is intended to be an alternative to the IELM (@pxref{Lisp Interaction, Emacs Lisp Interaction, , emacs, The Emacs Editor})
+REPL for Emacs @emph{and} with an interface similar to command shells
+such as @command{bash}, @command{zsh}, @command{rc}, or
+@command{4dos}.
@c This manual is updated to release 2.4 of Eshell.
@insertcopying
@menu
* Introduction:: A brief introduction to the Emacs Shell.
-* Command basics:: The basics of command usage.
* Commands::
* Expansion::
* Input/Output::
Eshell is @emph{not} a replacement for system shells such as
@command{bash} or @command{zsh}. Use Eshell when you want to move
text between Emacs and external processes; if you only want to pipe
-output from one external process to another, to another, use a system
-shell, because Emacs's IO system is buffer oriented, not stream
-oriented, and is very inefficient at such tasks. If you want to write
-shell scripts in Eshell, don't; either write an elisp library or use a
-system shell.
+output from one external process to another (and then another, and so
+on), use a system shell, because Emacs's IO system is buffer oriented,
+not stream oriented, and is very inefficient at such tasks. If you
+want to write shell scripts in Eshell, don't; either write an elisp
+library or use a system shell.
Some things Eshell just doesn't do well. It fills the niche between
IELM and your system shell, where the peculiar use-cases lie, and it
requests, bug reports and encouragement. Thanks a lot! Without you
there would be no new releases of Eshell.
-@node Command basics
-@chapter Basic overview
-
-A command shell is a means of entering verbally-formed commands. This
-is really all that it does, and every feature described in this manual
-is a means to that end. Therefore, it's important to take firm hold on
-exactly what a command is, and how it fits in the overall picture of
-things.
-
-@menu
-* Commands verbs:: Commands always begin with a verb.
-* Command arguments:: Some verbs require arguments.
-@end menu
-
-@node Commands verbs
-@section Commands verbs
-
-Commands are expressed using @dfn{script}, a special shorthand language
-computers can understand with no trouble. Script is an extremely simple
-language; oddly enough, this is what makes it look so complicated!
-Whereas normal languages use a variety of embellishments, the form of a
-script command is always:
-
-@example
-@var{verb} [@var{arguments}]
-@end example
-
-The verb expresses what you want your computer to do. There are a fixed
-number of verbs, although this number is usually quite large. On the
-author's computer, it reaches almost 1400 in number. But of course,
-only a handful of these are really necessary.
-
-Sometimes, the verb is all that's written. A verb is always a single
-word, usually related to the task it performs. @command{reboot} is a
-good example. Entering that on GNU/Linux will reboot the
-computer---assuming you have sufficient privileges.
-
-Other verbs require more information. These are usually very capable
-verbs, and must be told specifically what to do. The extra information
-is given in the form of @dfn{arguments}. For example, the
-@command{echo} verb prints back whatever arguments you type. It
-requires these arguments to know what to echo. A proper use of
-@command{echo} looks like this:
-
-@example
-echo This is an example of using echo!
-@end example
-
-This script command causes the computer to echo back: ``This is an
-example of using echo!''
-
-Although command verbs are always simple words, like @command{reboot} or
-@command{echo}, arguments may have a wide variety of forms. There are
-textual arguments, numerical arguments---even Lisp arguments.
-Distinguishing these different types of arguments requires special
-typing, for the computer to know exactly what you mean.
-
-@node Command arguments
-@section Command arguments
-
-Eshell recognizes several different kinds of command arguments:
-
-@enumerate
-@item Strings (also called textual arguments)
-@item Numbers (floating point or integer)
-@item Lisp lists
-@item Lisp symbols
-@item Emacs buffers
-@item Emacs process handles
-@end enumerate
-
-Most users need to worry only about the first two. The third, Lisp lists,
-occur very frequently, but almost always behind the scenes.
-
-Strings are the most common type of argument, and consist of nearly any
-character. Special characters---those used by Eshell
-specifically---must be preceded by a backslash (@samp{\}). When in doubt, it
-is safe to add backslashes anywhere and everywhere.
-
-Here is a more complicated @command{echo} example:
-
-@example
-echo A\ Multi-word\ Argument\ With\ A\ \$\ dollar
-@end example
-
-Beyond this, things get a bit more complicated. While not beyond the
-reach of someone wishing to learn, it is definitely beyond the scope of
-this manual to present it all in a simplistic manner. Get comfortable
-with Eshell as a basic command invocation tool, and learn more about the
-commands on your system; then come back when it all sits more familiarly
-on your mind. Have fun!
-
@node Commands
@chapter Commands
If you would prefer to use the built-in commands instead of the external
commands, set @code{eshell-prefer-lisp-functions} to @code{t}.
-Some of the built-in commands have different behaviour from their
+Some of the built-in commands have different behavior from their
external counterparts, and some have no external counterpart. Most of
these will print a usage message when given the @code{--help} option.
incompatibilities. Most globbing is pattern-based expansion, but there
is also predicate-based expansion. See
@ref{Filename Generation, , , zsh, The Z Shell Manual}
-for full syntax. To customize the syntax and behaviour of globbing in
+for full syntax. To customize the syntax and behavior of globbing in
Eshell see the Customize@footnote{@xref{Easy Customization, , , emacs,
The GNU Emacs Manual}.}
groups ``eshell-glob'' and ``eshell-pred''.
The buffer redirection operator, @code{>>>}, expects a buffer object
on the right-hand side, into which it inserts the output of the
left-hand side. e.g., @samp{echo hello >>> #<buffer *scratch*>}
-inserts the string @code{"hello"} into the @code{*scratch*} buffer.
+inserts the string @code{"hello"} into the @file{*scratch*} buffer.
@code{eshell-virtual-targets} is a list of mappings of virtual device
names to functions. Eshell comes with two virtual devices: