Copyright (C) 1991, 1993, 1996 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.
Bash is the shell, or command language interpreter,
that will appear in the GNU operating system.
The name is an acronym for the `Bourne-Again SHell',
a pun on Steve Bourne, the author of the direct ancestor of the current
Unix shell /bin/sh
,
which appeared in the Seventh Edition Bell Labs Research version
of Unix.
Bash is an sh
-compatible shell that incorporates useful
features from the Korn shell ksh
and the C shell csh
.
It is intended to be a conformant implementation of the IEEE
POSIX Shell and Tools specification (IEEE Working Group 1003.2).
It offers functional improvements over sh
for both interactive and
programming use.
While the GNU operating system will include a version
of csh
, Bash will be the default shell.
Like other GNU software, Bash is quite portable. It currently runs
on nearly every version of Unix and a few other operating systems -
independently-supported ports exist for MS-DOS, OS/2,
Windows 95, and Windows NT.
At its base, a shell is simply a macro processor that executes commands. A Unix shell is both a command interpreter, which provides the user interface to the rich set of Unix utilities, and a programming language, allowing these utilitites to be combined. Files containing commands can be created, and become commands themselves. These new commands have the same status as system commands in directories like `/bin', allowing users or groups to establish custom environments.
A shell allows execution of Unix commands, both synchronously and
asynchronously.
The shell waits for synchronous commands to complete before accepting
more input; asynchronous commands continue to execute in parallel
with the shell while it reads and executes additional commands.
The redirection constructs permit
fine-grained control of the input and output of those commands,
and the shell allows control over the contents of their
environment. Unix shells also provide a small set of built-in
commands (builtins) implementing functionality impossible
(e.g., cd
, break
, continue
, and
exec
), or inconvenient (history
, getopts
,
kill
, or pwd
, for example) to obtain via separate
utilities. Shells may be used interactively or
non-interactively: they accept input typed from the keyboard or
from a file. All of the shell builtins are described in
subsequent sections.
While executing commands is essential, most of the power (and complexity) of shells is due to their embedded programming languages. Like any high-level language, the shell provides variables, flow control constructs, quoting, and functions.
Shells have begun offering features geared specifically for interactive use rather than to augment the programming language. These interactive features include job control, command line editing, history and aliases. Each of these features is described in this manual.
Go to the first, previous, next, last section, table of contents.