Unlike regular system shells, Eshell never invokes kernel functions
directly, such as
exec(3). Instead, it uses the Lisp functions
available in the Emacs Lisp library. It does this by transforming the
input line into a callable Lisp form.3
The command can be either an Elisp function or an external command. Eshell looks first for an alias with the same name as the command, then a built-in command or a function with the same name; if there is no match, it then tries to execute it as an external command.
The semicolon (
;) can be used to separate multiple command
invocations on a single line. A command invocation followed by an
&) will be run in the background. Eshell has no job
control, so you can not suspend or background the current process, or
bring a background process into the foreground. That said, background
processes invoked from Eshell can be controlled the same way as any
other background process in Emacs.
To see the Lisp form that will be invoked, type: ‘eshell-parse-command "echo hello"’