Document Eshell entry points
* doc/misc/eshell.texi (Entry Points): New chapter. (Scripts): Move under Entry Points. Expand documentation.
This commit is contained in:
parent
8350ebd22e
commit
37475c9af7
1 changed files with 111 additions and 28 deletions
|
@ -76,6 +76,7 @@ similar to command shells such as @command{bash}, @command{zsh},
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Introduction:: A brief introduction to the Emacs Shell.
|
* Introduction:: A brief introduction to the Emacs Shell.
|
||||||
|
* Entry Points::
|
||||||
* Commands::
|
* Commands::
|
||||||
* Expansion::
|
* Expansion::
|
||||||
* Input/Output::
|
* Input/Output::
|
||||||
|
@ -186,6 +187,116 @@ Apart from these, a lot of people have sent suggestions, ideas,
|
||||||
requests, bug reports and encouragement. Thanks a lot! Without you
|
requests, bug reports and encouragement. Thanks a lot! Without you
|
||||||
there would be no new releases of Eshell.
|
there would be no new releases of Eshell.
|
||||||
|
|
||||||
|
@node Entry Points
|
||||||
|
@chapter Entry Points
|
||||||
|
@cindex starting Eshell
|
||||||
|
@cindex Eshell, starting
|
||||||
|
|
||||||
|
Eshell provides several different ways to start it, depending on the
|
||||||
|
situation.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Interactive Shell::
|
||||||
|
* One-Off Commands::
|
||||||
|
* Scripts::
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node Interactive Shell
|
||||||
|
@section Interactive Shell
|
||||||
|
@cindex interactive session
|
||||||
|
|
||||||
|
The most common way to use Eshell is via an interactive shell. You can
|
||||||
|
start this via the @code{eshell} command:
|
||||||
|
|
||||||
|
@deffn Command eshell &optional arg
|
||||||
|
Start a new interactive Eshell session, or switch to an already active
|
||||||
|
session. The exact behavior depends on the value of @var{arg}
|
||||||
|
(interactively, the prefix argument):
|
||||||
|
|
||||||
|
@table @asis
|
||||||
|
|
||||||
|
@item @code{nil} or omitted
|
||||||
|
Start or switch to the default Eshell session. This is the behavior
|
||||||
|
when typing @kbd{M-x eshell @key{RET}}.
|
||||||
|
|
||||||
|
@item a number
|
||||||
|
Start or switch to the Eshell session with the specified number (e.g.@:
|
||||||
|
@samp{*eshell*<2>}).
|
||||||
|
|
||||||
|
@item anything else
|
||||||
|
Start a new Eshell session, no matter if another one already exists.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@node One-Off Commands
|
||||||
|
@section One-Off Commands
|
||||||
|
@cindex command invocation, from anywhere
|
||||||
|
|
||||||
|
You can also run individual Eshell commands from anywhere within Emacs:
|
||||||
|
|
||||||
|
@deffn Command eshell-command command &optional to-current-buffer
|
||||||
|
Execute the Eshell command string @var{command} and show the output in a
|
||||||
|
buffer. If @var{to-current-buffer} is non-@code{nil} (interactively,
|
||||||
|
with the prefix argument), then insert output into the current buffer at
|
||||||
|
point.
|
||||||
|
|
||||||
|
When the command ends with @kbd{&}, Eshell will evaluate the command
|
||||||
|
asynchronously. Otherwise, it will wait until the command has finished
|
||||||
|
execution.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@defun eshell-command-result command &optional status-var
|
||||||
|
Execute the Eshell command string @var{command} and return the result,
|
||||||
|
like using the variable @code{$$} in an interactive session
|
||||||
|
(@pxref{Variables}). If @var{status-var} is a symbol, this function
|
||||||
|
will set it to the exit status of the command (like using the variable
|
||||||
|
@code{$?} in an interactive session).
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@node Scripts
|
||||||
|
@section Scripts
|
||||||
|
@cindex scripts
|
||||||
|
|
||||||
|
@cmindex source
|
||||||
|
@cmindex .
|
||||||
|
Like other shells, you can create Eshell @dfn{scripts}. An Eshell
|
||||||
|
script is simply a file containing a sequence of commands that will be
|
||||||
|
executed as though you entered them one at a time in an interactive
|
||||||
|
Eshell session. You can invoke these scripts from within Eshell with
|
||||||
|
@command{source}, which will run the script in a subshell. If you wish
|
||||||
|
to run a script in your @emph{current} Eshell environment, use the
|
||||||
|
@code{.} command instead.
|
||||||
|
|
||||||
|
Like with aliases (@pxref{Aliases}), Eshell scripts can accept any
|
||||||
|
number of arguments. Within the script, you can refer to these with
|
||||||
|
the special variables @code{$0}, @code{$1}, @dots{}, @code{$9}, and
|
||||||
|
@code{$*}.
|
||||||
|
|
||||||
|
You can also invoke Eshell scripts from outside of Eshell:
|
||||||
|
|
||||||
|
@defun eshell-execute-file file &optional args destination
|
||||||
|
Execute the Eshell commands contained in @var{file}, passing an optional
|
||||||
|
list of @var{args} to the script. If @var{destination} is @code{t},
|
||||||
|
write the command output to the current buffer. If @code{nil}, don't
|
||||||
|
write the output anywhere. For any other value, output to the
|
||||||
|
corresponding Eshell target (@pxref{Redirection}).
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@cindex batch scripts
|
||||||
|
@defun eshell-batch-file
|
||||||
|
This function lets you make an Eshell script file executable from
|
||||||
|
outside of Emacs by adding it to the script's interpreter directive like
|
||||||
|
this:
|
||||||
|
|
||||||
|
@example
|
||||||
|
#!/usr/bin/env -S emacs --batch -f eshell-batch-file
|
||||||
|
@end example
|
||||||
|
|
||||||
|
As with other ways of invoking Eshell scripts, you can pass extra
|
||||||
|
arguments to the script on the command line.
|
||||||
|
@end defun
|
||||||
|
|
||||||
@node Commands
|
@node Commands
|
||||||
@chapter Commands
|
@chapter Commands
|
||||||
|
|
||||||
|
@ -208,7 +319,6 @@ that will be invoked, type this as the Eshell prompt:
|
||||||
* Aliases::
|
* Aliases::
|
||||||
* Remote Access::
|
* Remote Access::
|
||||||
* Control Flow::
|
* Control Flow::
|
||||||
* Scripts::
|
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Invocation
|
@node Invocation
|
||||||
|
@ -1594,33 +1704,6 @@ treat it as a list of one element. If you specify multiple
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Scripts
|
|
||||||
@section Scripts
|
|
||||||
@cmindex source
|
|
||||||
@fnindex eshell-execute-file
|
|
||||||
@fnindex eshell-batch-file
|
|
||||||
You can run Eshell scripts much like scripts for other shells; the main
|
|
||||||
difference is that since Eshell is not a system command, you have to run
|
|
||||||
it from within Emacs. An Eshell script is simply a file containing a
|
|
||||||
sequence of commands, as with almost any other shell script. You can
|
|
||||||
invoke scripts from within Eshell with @command{source}, or from
|
|
||||||
anywhere in Emacs with @code{eshell-execute-file}. Additionally, you
|
|
||||||
can make an Eshell script file executable by calling
|
|
||||||
@code{eshell-batch-file} in the interpreter directive:
|
|
||||||
|
|
||||||
@example
|
|
||||||
#!/usr/bin/env -S emacs --batch -f eshell-batch-file
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Like with aliases (@pxref{Aliases}), Eshell scripts can accept any
|
|
||||||
number of arguments. Within the script, you can refer to these with
|
|
||||||
the special variables @code{$0}, @code{$1}, @dots{}, @code{$9}, and
|
|
||||||
@code{$*}.
|
|
||||||
|
|
||||||
@cmindex .
|
|
||||||
If you wish to load a script into your @emph{current} environment,
|
|
||||||
rather than in a subshell, use the @code{.} command.
|
|
||||||
|
|
||||||
@node Expansion
|
@node Expansion
|
||||||
@chapter Expansion
|
@chapter Expansion
|
||||||
Expansion in a command shell is somewhat like macro expansion in macro
|
Expansion in a command shell is somewhat like macro expansion in macro
|
||||||
|
|
Loading…
Add table
Reference in a new issue