mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-21 21:07:57 +02:00
11267 lines
474 KiB
Plaintext
11267 lines
474 KiB
Plaintext
This is bashref.info, produced by makeinfo version 4.13 from
|
|
/usr/homes/chet/src/bash/src/doc/bashref.texi.
|
|
|
|
This text is a brief description of the features that are present in
|
|
the Bash shell (version 4.3, 2 September 2013).
|
|
|
|
This is Edition 4.3, last updated 2 September 2013, of `The GNU Bash
|
|
Reference Manual', for `Bash', Version 4.3.
|
|
|
|
Copyright (C) 1988-2013 Free Software Foundation, Inc.
|
|
|
|
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, no Front-Cover Texts, and
|
|
no Back-Cover Texts. A copy of the license is included in the
|
|
section entitled "GNU Free Documentation License".
|
|
|
|
INFO-DIR-SECTION Basics
|
|
START-INFO-DIR-ENTRY
|
|
* Bash: (bash). The GNU Bourne-Again SHell.
|
|
END-INFO-DIR-ENTRY
|
|
|
|
|
|
File: bashref.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
|
|
|
|
Bash Features
|
|
*************
|
|
|
|
This text is a brief description of the features that are present in
|
|
the Bash shell (version 4.3, 2 September 2013). The Bash home page is
|
|
`http://www.gnu.org/software/bash/'.
|
|
|
|
This is Edition 4.3, last updated 2 September 2013, of `The GNU Bash
|
|
Reference Manual', for `Bash', Version 4.3.
|
|
|
|
Bash contains features that appear in other popular shells, and some
|
|
features that only appear in Bash. Some of the shells that Bash has
|
|
borrowed concepts from are the Bourne Shell (`sh'), the Korn Shell
|
|
(`ksh'), and the C-shell (`csh' and its successor, `tcsh'). The
|
|
following menu breaks the features up into categories, noting which
|
|
features were inspired by other shells and which are specific to Bash.
|
|
|
|
This manual is meant as a brief introduction to features found in
|
|
Bash. The Bash manual page should be used as the definitive reference
|
|
on shell behavior.
|
|
|
|
* Menu:
|
|
|
|
* Introduction:: An introduction to the shell.
|
|
* Definitions:: Some definitions used in the rest of this
|
|
manual.
|
|
* Basic Shell Features:: The shell "building blocks".
|
|
* Shell Builtin Commands:: Commands that are a part of the shell.
|
|
* Shell Variables:: Variables used or set by Bash.
|
|
* Bash Features:: Features found only in Bash.
|
|
* Job Control:: What job control is and how Bash allows you
|
|
to use it.
|
|
* Command Line Editing:: Chapter describing the command line
|
|
editing features.
|
|
* Using History Interactively:: Command History Expansion
|
|
* Installing Bash:: How to build and install Bash on your system.
|
|
* Reporting Bugs:: How to report bugs in Bash.
|
|
* Major Differences From The Bourne Shell:: A terse list of the differences
|
|
between Bash and historical
|
|
versions of /bin/sh.
|
|
* GNU Free Documentation License:: Copying and sharing this documentation.
|
|
* Indexes:: Various indexes for this manual.
|
|
|
|
|
|
File: bashref.info, Node: Introduction, Next: Definitions, Prev: Top, Up: Top
|
|
|
|
1 Introduction
|
|
**************
|
|
|
|
* Menu:
|
|
|
|
* What is Bash?:: A short description of Bash.
|
|
* What is a shell?:: A brief introduction to shells.
|
|
|
|
|
|
File: bashref.info, Node: What is Bash?, Next: What is a shell?, Up: Introduction
|
|
|
|
1.1 What is Bash?
|
|
=================
|
|
|
|
Bash is the shell, or command language interpreter, for the GNU
|
|
operating system. The name is an acronym for the `Bourne-Again SHell',
|
|
a pun on Stephen Bourne, the author of the direct ancestor of the
|
|
current Unix shell `sh', which appeared in the Seventh Edition Bell
|
|
Labs Research version of Unix.
|
|
|
|
Bash is largely compatible with `sh' and 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 portion of the IEEE POSIX specification (IEEE Standard 1003.1).
|
|
It offers functional improvements over `sh' for both interactive and
|
|
programming use.
|
|
|
|
While the GNU operating system provides other shells, including a
|
|
version of `csh', Bash is 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, and Windows platforms.
|
|
|
|
|
|
File: bashref.info, Node: What is a shell?, Prev: What is Bash?, Up: Introduction
|
|
|
|
1.2 What is a shell?
|
|
====================
|
|
|
|
At its base, a shell is simply a macro processor that executes
|
|
commands. The term macro processor means functionality where text and
|
|
symbols are expanded to create larger expressions.
|
|
|
|
A Unix shell is both a command interpreter and a programming
|
|
language. As a command interpreter, the shell provides the user
|
|
interface to the rich set of GNU utilities. The programming language
|
|
features allow these utilities 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 such as
|
|
`/bin', allowing users or groups to establish custom environments to
|
|
automate their common tasks.
|
|
|
|
Shells may be used interactively or non-interactively. In
|
|
interactive mode, they accept input typed from the keyboard. When
|
|
executing non-interactively, shells execute commands read from a file.
|
|
|
|
A shell allows execution of GNU 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. Moreover, the shell allows
|
|
control over the contents of commands' environments.
|
|
|
|
Shells also provide a small set of built-in commands ("builtins")
|
|
implementing functionality impossible or inconvenient to obtain via
|
|
separate utilities. For example, `cd', `break', `continue', and `exec'
|
|
cannot be implemented outside of the shell because they directly
|
|
manipulate the shell itself. The `history', `getopts', `kill', or `pwd'
|
|
builtins, among others, could be implemented in separate utilities, but
|
|
they are more convenient to use as builtin commands. 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 offer features geared specifically for interactive use rather
|
|
than to augment the programming language. These interactive features
|
|
include job control, command line editing, command history and aliases.
|
|
Each of these features is described in this manual.
|
|
|
|
|
|
File: bashref.info, Node: Definitions, Next: Basic Shell Features, Prev: Introduction, Up: Top
|
|
|
|
2 Definitions
|
|
*************
|
|
|
|
These definitions are used throughout the remainder of this manual.
|
|
|
|
`POSIX'
|
|
A family of open system standards based on Unix. Bash is
|
|
primarily concerned with the Shell and Utilities portion of the
|
|
POSIX 1003.1 standard.
|
|
|
|
`blank'
|
|
A space or tab character.
|
|
|
|
`builtin'
|
|
A command that is implemented internally by the shell itself,
|
|
rather than by an executable program somewhere in the file system.
|
|
|
|
`control operator'
|
|
A `token' that performs a control function. It is a `newline' or
|
|
one of the following: `||', `&&', `&', `;', `;;', `|', `|&', `(',
|
|
or `)'.
|
|
|
|
`exit status'
|
|
The value returned by a command to its caller. The value is
|
|
restricted to eight bits, so the maximum value is 255.
|
|
|
|
`field'
|
|
A unit of text that is the result of one of the shell expansions.
|
|
After expansion, when executing a command, the resulting fields
|
|
are used as the command name and arguments.
|
|
|
|
`filename'
|
|
A string of characters used to identify a file.
|
|
|
|
`job'
|
|
A set of processes comprising a pipeline, and any processes
|
|
descended from it, that are all in the same process group.
|
|
|
|
`job control'
|
|
A mechanism by which users can selectively stop (suspend) and
|
|
restart (resume) execution of processes.
|
|
|
|
`metacharacter'
|
|
A character that, when unquoted, separates words. A metacharacter
|
|
is a `blank' or one of the following characters: `|', `&', `;',
|
|
`(', `)', `<', or `>'.
|
|
|
|
`name'
|
|
A `word' consisting solely of letters, numbers, and underscores,
|
|
and beginning with a letter or underscore. `Name's are used as
|
|
shell variable and function names. Also referred to as an
|
|
`identifier'.
|
|
|
|
`operator'
|
|
A `control operator' or a `redirection operator'. *Note
|
|
Redirections::, for a list of redirection operators. Operators
|
|
contain at least one unquoted `metacharacter'.
|
|
|
|
`process group'
|
|
A collection of related processes each having the same process
|
|
group ID.
|
|
|
|
`process group ID'
|
|
A unique identifier that represents a `process group' during its
|
|
lifetime.
|
|
|
|
`reserved word'
|
|
A `word' that has a special meaning to the shell. Most reserved
|
|
words introduce shell flow control constructs, such as `for' and
|
|
`while'.
|
|
|
|
`return status'
|
|
A synonym for `exit status'.
|
|
|
|
`signal'
|
|
A mechanism by which a process may be notified by the kernel of an
|
|
event occurring in the system.
|
|
|
|
`special builtin'
|
|
A shell builtin command that has been classified as special by the
|
|
POSIX standard.
|
|
|
|
`token'
|
|
A sequence of characters considered a single unit by the shell.
|
|
It is either a `word' or an `operator'.
|
|
|
|
`word'
|
|
A sequence of characters treated as a unit by the shell. Words
|
|
may not include unquoted `metacharacters'.
|
|
|
|
|
|
File: bashref.info, Node: Basic Shell Features, Next: Shell Builtin Commands, Prev: Definitions, Up: Top
|
|
|
|
3 Basic Shell Features
|
|
**********************
|
|
|
|
Bash is an acronym for `Bourne-Again SHell'. The Bourne shell is the
|
|
traditional Unix shell originally written by Stephen Bourne. All of
|
|
the Bourne shell builtin commands are available in Bash, The rules for
|
|
evaluation and quoting are taken from the POSIX specification for the
|
|
`standard' Unix shell.
|
|
|
|
This chapter briefly summarizes the shell's `building blocks':
|
|
commands, control structures, shell functions, shell parameters, shell
|
|
expansions, redirections, which are a way to direct input and output
|
|
from and to named files, and how the shell executes commands.
|
|
|
|
* Menu:
|
|
|
|
* Shell Syntax:: What your input means to the shell.
|
|
* Shell Commands:: The types of commands you can use.
|
|
* Shell Functions:: Grouping commands by name.
|
|
* Shell Parameters:: How the shell stores values.
|
|
* Shell Expansions:: How Bash expands parameters and the various
|
|
expansions available.
|
|
* Redirections:: A way to control where input and output go.
|
|
* Executing Commands:: What happens when you run a command.
|
|
* Shell Scripts:: Executing files of shell commands.
|
|
|
|
|
|
File: bashref.info, Node: Shell Syntax, Next: Shell Commands, Up: Basic Shell Features
|
|
|
|
3.1 Shell Syntax
|
|
================
|
|
|
|
* Menu:
|
|
|
|
* Shell Operation:: The basic operation of the shell.
|
|
* Quoting:: How to remove the special meaning from characters.
|
|
* Comments:: How to specify comments.
|
|
|
|
When the shell reads input, it proceeds through a sequence of
|
|
operations. If the input indicates the beginning of a comment, the
|
|
shell ignores the comment symbol (`#'), and the rest of that line.
|
|
|
|
Otherwise, roughly speaking, the shell reads its input and divides
|
|
the input into words and operators, employing the quoting rules to
|
|
select which meanings to assign various words and characters.
|
|
|
|
The shell then parses these tokens into commands and other
|
|
constructs, removes the special meaning of certain words or characters,
|
|
expands others, redirects input and output as needed, executes the
|
|
specified command, waits for the command's exit status, and makes that
|
|
exit status available for further inspection or processing.
|
|
|
|
|
|
File: bashref.info, Node: Shell Operation, Next: Quoting, Up: Shell Syntax
|
|
|
|
3.1.1 Shell Operation
|
|
---------------------
|
|
|
|
The following is a brief description of the shell's operation when it
|
|
reads and executes a command. Basically, the shell does the following:
|
|
|
|
1. Reads its input from a file (*note Shell Scripts::), from a string
|
|
supplied as an argument to the `-c' invocation option (*note
|
|
Invoking Bash::), or from the user's terminal.
|
|
|
|
2. Breaks the input into words and operators, obeying the quoting
|
|
rules described in *note Quoting::. These tokens are separated by
|
|
`metacharacters'. Alias expansion is performed by this step
|
|
(*note Aliases::).
|
|
|
|
3. Parses the tokens into simple and compound commands (*note Shell
|
|
Commands::).
|
|
|
|
4. Performs the various shell expansions (*note Shell Expansions::),
|
|
breaking the expanded tokens into lists of filenames (*note
|
|
Filename Expansion::) and commands and arguments.
|
|
|
|
5. Performs any necessary redirections (*note Redirections::) and
|
|
removes the redirection operators and their operands from the
|
|
argument list.
|
|
|
|
6. Executes the command (*note Executing Commands::).
|
|
|
|
7. Optionally waits for the command to complete and collects its exit
|
|
status (*note Exit Status::).
|
|
|
|
|
|
|
|
File: bashref.info, Node: Quoting, Next: Comments, Prev: Shell Operation, Up: Shell Syntax
|
|
|
|
3.1.2 Quoting
|
|
-------------
|
|
|
|
* Menu:
|
|
|
|
* Escape Character:: How to remove the special meaning from a single
|
|
character.
|
|
* Single Quotes:: How to inhibit all interpretation of a sequence
|
|
of characters.
|
|
* Double Quotes:: How to suppress most of the interpretation of a
|
|
sequence of characters.
|
|
* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
|
|
* Locale Translation:: How to translate strings into different languages.
|
|
|
|
Quoting is used to remove the special meaning of certain characters
|
|
or words to the shell. Quoting can be used to disable special
|
|
treatment for special characters, to prevent reserved words from being
|
|
recognized as such, and to prevent parameter expansion.
|
|
|
|
Each of the shell metacharacters (*note Definitions::) has special
|
|
meaning to the shell and must be quoted if it is to represent itself.
|
|
When the command history expansion facilities are being used (*note
|
|
History Interaction::), the HISTORY EXPANSION character, usually `!',
|
|
must be quoted to prevent history expansion. *Note Bash History
|
|
Facilities::, for more details concerning history expansion.
|
|
|
|
There are three quoting mechanisms: the ESCAPE CHARACTER, single
|
|
quotes, and double quotes.
|
|
|
|
|
|
File: bashref.info, Node: Escape Character, Next: Single Quotes, Up: Quoting
|
|
|
|
3.1.2.1 Escape Character
|
|
........................
|
|
|
|
A non-quoted backslash `\' is the Bash escape character. It preserves
|
|
the literal value of the next character that follows, with the
|
|
exception of `newline'. If a `\newline' pair appears, and the
|
|
backslash itself is not quoted, the `\newline' is treated as a line
|
|
continuation (that is, it is removed from the input stream and
|
|
effectively ignored).
|
|
|
|
|
|
File: bashref.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Character, Up: Quoting
|
|
|
|
3.1.2.2 Single Quotes
|
|
.....................
|
|
|
|
Enclosing characters in single quotes (`'') preserves the literal value
|
|
of each character within the quotes. A single quote may not occur
|
|
between single quotes, even when preceded by a backslash.
|
|
|
|
|
|
File: bashref.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Quotes, Up: Quoting
|
|
|
|
3.1.2.3 Double Quotes
|
|
.....................
|
|
|
|
Enclosing characters in double quotes (`"') preserves the literal value
|
|
of all characters within the quotes, with the exception of `$', ``',
|
|
`\', and, when history expansion is enabled, `!'. The characters `$'
|
|
and ``' retain their special meaning within double quotes (*note Shell
|
|
Expansions::). The backslash retains its special meaning only when
|
|
followed by one of the following characters: `$', ``', `"', `\', or
|
|
`newline'. Within double quotes, backslashes that are followed by one
|
|
of these characters are removed. Backslashes preceding characters
|
|
without a special meaning are left unmodified. A double quote may be
|
|
quoted within double quotes by preceding it with a backslash. If
|
|
enabled, history expansion will be performed unless an `!' appearing in
|
|
double quotes is escaped using a backslash. The backslash preceding
|
|
the `!' is not removed.
|
|
|
|
The special parameters `*' and `@' have special meaning when in
|
|
double quotes (*note Shell Parameter Expansion::).
|
|
|
|
|
|
File: bashref.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double Quotes, Up: Quoting
|
|
|
|
3.1.2.4 ANSI-C Quoting
|
|
......................
|
|
|
|
Words of the form `$'STRING'' are treated specially. The word expands
|
|
to STRING, with backslash-escaped characters replaced as specified by
|
|
the ANSI C standard. Backslash escape sequences, if present, are
|
|
decoded as follows:
|
|
|
|
`\a'
|
|
alert (bell)
|
|
|
|
`\b'
|
|
backspace
|
|
|
|
`\e'
|
|
`\E'
|
|
an escape character (not ANSI C)
|
|
|
|
`\f'
|
|
form feed
|
|
|
|
`\n'
|
|
newline
|
|
|
|
`\r'
|
|
carriage return
|
|
|
|
`\t'
|
|
horizontal tab
|
|
|
|
`\v'
|
|
vertical tab
|
|
|
|
`\\'
|
|
backslash
|
|
|
|
`\''
|
|
single quote
|
|
|
|
`\"'
|
|
double quote
|
|
|
|
`\NNN'
|
|
the eight-bit character whose value is the octal value NNN (one to
|
|
three digits)
|
|
|
|
`\xHH'
|
|
the eight-bit character whose value is the hexadecimal value HH
|
|
(one or two hex digits)
|
|
|
|
`\uHHHH'
|
|
the Unicode (ISO/IEC 10646) character whose value is the
|
|
hexadecimal value HHHH (one to four hex digits)
|
|
|
|
`\UHHHHHHHH'
|
|
the Unicode (ISO/IEC 10646) character whose value is the
|
|
hexadecimal value HHHHHHHH (one to eight hex digits)
|
|
|
|
`\cX'
|
|
a control-X character
|
|
|
|
The expanded result is single-quoted, as if the dollar sign had not
|
|
been present.
|
|
|
|
|
|
File: bashref.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting
|
|
|
|
3.1.2.5 Locale-Specific Translation
|
|
...................................
|
|
|
|
A double-quoted string preceded by a dollar sign (`$') will cause the
|
|
string to be translated according to the current locale. If the
|
|
current locale is `C' or `POSIX', the dollar sign is ignored. If the
|
|
string is translated and replaced, the replacement is double-quoted.
|
|
|
|
Some systems use the message catalog selected by the `LC_MESSAGES'
|
|
shell variable. Others create the name of the message catalog from the
|
|
value of the `TEXTDOMAIN' shell variable, possibly adding a suffix of
|
|
`.mo'. If you use the `TEXTDOMAIN' variable, you may need to set the
|
|
`TEXTDOMAINDIR' variable to the location of the message catalog files.
|
|
Still others use both variables in this fashion:
|
|
`TEXTDOMAINDIR'/`LC_MESSAGES'/LC_MESSAGES/`TEXTDOMAIN'.mo.
|
|
|
|
|
|
File: bashref.info, Node: Comments, Prev: Quoting, Up: Shell Syntax
|
|
|
|
3.1.3 Comments
|
|
--------------
|
|
|
|
In a non-interactive shell, or an interactive shell in which the
|
|
`interactive_comments' option to the `shopt' builtin is enabled (*note
|
|
The Shopt Builtin::), a word beginning with `#' causes that word and
|
|
all remaining characters on that line to be ignored. An interactive
|
|
shell without the `interactive_comments' option enabled does not allow
|
|
comments. The `interactive_comments' option is on by default in
|
|
interactive shells. *Note Interactive Shells::, for a description of
|
|
what makes a shell interactive.
|
|
|
|
|
|
File: bashref.info, Node: Shell Commands, Next: Shell Functions, Prev: Shell Syntax, Up: Basic Shell Features
|
|
|
|
3.2 Shell Commands
|
|
==================
|
|
|
|
A simple shell command such as `echo a b c' consists of the command
|
|
itself followed by arguments, separated by spaces.
|
|
|
|
More complex shell commands are composed of simple commands arranged
|
|
together in a variety of ways: in a pipeline in which the output of one
|
|
command becomes the input of a second, in a loop or conditional
|
|
construct, or in some other grouping.
|
|
|
|
* Menu:
|
|
|
|
* Simple Commands:: The most common type of command.
|
|
* Pipelines:: Connecting the input and output of several
|
|
commands.
|
|
* Lists:: How to execute commands sequentially.
|
|
* Compound Commands:: Shell commands for control flow.
|
|
* Coprocesses:: Two-way communication between commands.
|
|
* GNU Parallel:: Running commands in parallel.
|
|
|
|
|
|
File: bashref.info, Node: Simple Commands, Next: Pipelines, Up: Shell Commands
|
|
|
|
3.2.1 Simple Commands
|
|
---------------------
|
|
|
|
A simple command is the kind of command encountered most often. It's
|
|
just a sequence of words separated by `blank's, terminated by one of
|
|
the shell's control operators (*note Definitions::). The first word
|
|
generally specifies a command to be executed, with the rest of the
|
|
words being that command's arguments.
|
|
|
|
The return status (*note Exit Status::) of a simple command is its
|
|
exit status as provided by the POSIX 1003.1 `waitpid' function, or
|
|
128+N if the command was terminated by signal N.
|
|
|
|
|
|
File: bashref.info, Node: Pipelines, Next: Lists, Prev: Simple Commands, Up: Shell Commands
|
|
|
|
3.2.2 Pipelines
|
|
---------------
|
|
|
|
A `pipeline' is a sequence of simple commands separated by one of the
|
|
control operators `|' or `|&'.
|
|
|
|
The format for a pipeline is
|
|
[time [-p]] [!] COMMAND1 [ | or |& COMMAND2 ] ...
|
|
|
|
The output of each command in the pipeline is connected via a pipe to
|
|
the input of the next command. That is, each command reads the
|
|
previous command's output. This connection is performed before any
|
|
redirections specified by the command.
|
|
|
|
If `|&' is used, COMMAND1's standard error, in addition to its
|
|
standard output, is connected to COMMAND2's standard input through the
|
|
pipe; it is shorthand for `2>&1 |'. This implicit redirection of the
|
|
standard error to the standard output is performed after any
|
|
redirections specified by the command.
|
|
|
|
The reserved word `time' causes timing statistics to be printed for
|
|
the pipeline once it finishes. The statistics currently consist of
|
|
elapsed (wall-clock) time and user and system time consumed by the
|
|
command's execution. The `-p' option changes the output format to that
|
|
specified by POSIX. When the shell is in POSIX mode (*note Bash POSIX
|
|
Mode::), it does not recognize `time' as a reserved word if the next
|
|
token begins with a `-'. The `TIMEFORMAT' variable may be set to a
|
|
format string that specifies how the timing information should be
|
|
displayed. *Note Bash Variables::, for a description of the available
|
|
formats. The use of `time' as a reserved word permits the timing of
|
|
shell builtins, shell functions, and pipelines. An external `time'
|
|
command cannot time these easily.
|
|
|
|
When the shell is in POSIX mode (*note Bash POSIX Mode::), `time'
|
|
may be followed by a newline. In this case, the shell displays the
|
|
total user and system time consumed by the shell and its children. The
|
|
`TIMEFORMAT' variable may be used to specify the format of the time
|
|
information.
|
|
|
|
If the pipeline is not executed asynchronously (*note Lists::), the
|
|
shell waits for all commands in the pipeline to complete.
|
|
|
|
Each command in a pipeline is executed in its own subshell (*note
|
|
Command Execution Environment::). The exit status of a pipeline is the
|
|
exit status of the last command in the pipeline, unless the `pipefail'
|
|
option is enabled (*note The Set Builtin::). If `pipefail' is enabled,
|
|
the pipeline's return status is the value of the last (rightmost)
|
|
command to exit with a non-zero status, or zero if all commands exit
|
|
successfully. If the reserved word `!' precedes the pipeline, the exit
|
|
status is the logical negation of the exit status as described above.
|
|
The shell waits for all commands in the pipeline to terminate before
|
|
returning a value.
|
|
|
|
|
|
File: bashref.info, Node: Lists, Next: Compound Commands, Prev: Pipelines, Up: Shell Commands
|
|
|
|
3.2.3 Lists of Commands
|
|
-----------------------
|
|
|
|
A `list' is a sequence of one or more pipelines separated by one of the
|
|
operators `;', `&', `&&', or `||', and optionally terminated by one of
|
|
`;', `&', or a `newline'.
|
|
|
|
Of these list operators, `&&' and `||' have equal precedence,
|
|
followed by `;' and `&', which have equal precedence.
|
|
|
|
A sequence of one or more newlines may appear in a `list' to delimit
|
|
commands, equivalent to a semicolon.
|
|
|
|
If a command is terminated by the control operator `&', the shell
|
|
executes the command asynchronously in a subshell. This is known as
|
|
executing the command in the BACKGROUND. The shell does not wait for
|
|
the command to finish, and the return status is 0 (true). When job
|
|
control is not active (*note Job Control::), the standard input for
|
|
asynchronous commands, in the absence of any explicit redirections, is
|
|
redirected from `/dev/null'.
|
|
|
|
Commands separated by a `;' are executed sequentially; the shell
|
|
waits for each command to terminate in turn. The return status is the
|
|
exit status of the last command executed.
|
|
|
|
AND and OR lists are sequences of one or more pipelines separated by
|
|
the control operators `&&' and `||', respectively. AND and OR lists
|
|
are executed with left associativity.
|
|
|
|
An AND list has the form
|
|
COMMAND1 && COMMAND2
|
|
|
|
COMMAND2 is executed if, and only if, COMMAND1 returns an exit status
|
|
of zero.
|
|
|
|
An OR list has the form
|
|
COMMAND1 || COMMAND2
|
|
|
|
COMMAND2 is executed if, and only if, COMMAND1 returns a non-zero exit
|
|
status.
|
|
|
|
The return status of AND and OR lists is the exit status of the last
|
|
command executed in the list.
|
|
|
|
|
|
File: bashref.info, Node: Compound Commands, Next: Coprocesses, Prev: Lists, Up: Shell Commands
|
|
|
|
3.2.4 Compound Commands
|
|
-----------------------
|
|
|
|
* Menu:
|
|
|
|
* Looping Constructs:: Shell commands for iterative action.
|
|
* Conditional Constructs:: Shell commands for conditional execution.
|
|
* Command Grouping:: Ways to group commands.
|
|
|
|
Compound commands are the shell programming constructs. Each
|
|
construct begins with a reserved word or control operator and is
|
|
terminated by a corresponding reserved word or operator. Any
|
|
redirections (*note Redirections::) associated with a compound command
|
|
apply to all commands within that compound command unless explicitly
|
|
overridden.
|
|
|
|
In most cases a list of commands in a compound command's description
|
|
may be separated from the rest of the command by one or more newlines,
|
|
and may be followed by a newline in place of a semicolon.
|
|
|
|
Bash provides looping constructs, conditional commands, and
|
|
mechanisms to group commands and execute them as a unit.
|
|
|
|
|
|
File: bashref.info, Node: Looping Constructs, Next: Conditional Constructs, Up: Compound Commands
|
|
|
|
3.2.4.1 Looping Constructs
|
|
..........................
|
|
|
|
Bash supports the following looping constructs.
|
|
|
|
Note that wherever a `;' appears in the description of a command's
|
|
syntax, it may be replaced with one or more newlines.
|
|
|
|
`until'
|
|
The syntax of the `until' command is:
|
|
|
|
until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
|
|
|
|
Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
|
|
status which is not zero. The return status is the exit status of
|
|
the last command executed in CONSEQUENT-COMMANDS, or zero if none
|
|
was executed.
|
|
|
|
`while'
|
|
The syntax of the `while' command is:
|
|
|
|
while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
|
|
|
|
Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
|
|
status of zero. The return status is the exit status of the last
|
|
command executed in CONSEQUENT-COMMANDS, or zero if none was
|
|
executed.
|
|
|
|
`for'
|
|
The syntax of the `for' command is:
|
|
|
|
for NAME [ [in [WORDS ...] ] ; ] do COMMANDS; done
|
|
|
|
Expand WORDS, and execute COMMANDS once for each member in the
|
|
resultant list, with NAME bound to the current member. If `in
|
|
WORDS' is not present, the `for' command executes the COMMANDS
|
|
once for each positional parameter that is set, as if `in "$@"'
|
|
had been specified (*note Special Parameters::). The return
|
|
status is the exit status of the last command that executes. If
|
|
there are no items in the expansion of WORDS, no commands are
|
|
executed, and the return status is zero.
|
|
|
|
An alternate form of the `for' command is also supported:
|
|
|
|
for (( EXPR1 ; EXPR2 ; EXPR3 )) ; do COMMANDS ; done
|
|
|
|
First, the arithmetic expression EXPR1 is evaluated according to
|
|
the rules described below (*note Shell Arithmetic::). The
|
|
arithmetic expression EXPR2 is then evaluated repeatedly until it
|
|
evaluates to zero. Each time EXPR2 evaluates to a non-zero value,
|
|
COMMANDS are executed and the arithmetic expression EXPR3 is
|
|
evaluated. If any expression is omitted, it behaves as if it
|
|
evaluates to 1. The return value is the exit status of the last
|
|
command in COMMANDS that is executed, or false if any of the
|
|
expressions is invalid.
|
|
|
|
The `break' and `continue' builtins (*note Bourne Shell Builtins::)
|
|
may be used to control loop execution.
|
|
|
|
|
|
File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Prev: Looping Constructs, Up: Compound Commands
|
|
|
|
3.2.4.2 Conditional Constructs
|
|
..............................
|
|
|
|
`if'
|
|
The syntax of the `if' command is:
|
|
|
|
if TEST-COMMANDS; then
|
|
CONSEQUENT-COMMANDS;
|
|
[elif MORE-TEST-COMMANDS; then
|
|
MORE-CONSEQUENTS;]
|
|
[else ALTERNATE-CONSEQUENTS;]
|
|
fi
|
|
|
|
The TEST-COMMANDS list is executed, and if its return status is
|
|
zero, the CONSEQUENT-COMMANDS list is executed. If TEST-COMMANDS
|
|
returns a non-zero status, each `elif' list is executed in turn,
|
|
and if its exit status is zero, the corresponding MORE-CONSEQUENTS
|
|
is executed and the command completes. If `else
|
|
ALTERNATE-CONSEQUENTS' is present, and the final command in the
|
|
final `if' or `elif' clause has a non-zero exit status, then
|
|
ALTERNATE-CONSEQUENTS is executed. The return status is the exit
|
|
status of the last command executed, or zero if no condition
|
|
tested true.
|
|
|
|
`case'
|
|
The syntax of the `case' command is:
|
|
|
|
case WORD in [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]... esac
|
|
|
|
`case' will selectively execute the COMMAND-LIST corresponding to
|
|
the first PATTERN that matches WORD. If the shell option
|
|
`nocasematch' (see the description of `shopt' in *note The Shopt
|
|
Builtin::) is enabled, the match is performed without regard to
|
|
the case of alphabetic characters. The `|' is used to separate
|
|
multiple patterns, and the `)' operator terminates a pattern list.
|
|
A list of patterns and an associated command-list is known as a
|
|
CLAUSE.
|
|
|
|
Each clause must be terminated with `;;', `;&', or `;;&'. The
|
|
WORD undergoes tilde expansion, parameter expansion, command
|
|
substitution, arithmetic expansion, and quote removal before
|
|
matching is attempted. Each PATTERN undergoes tilde expansion,
|
|
parameter expansion, command substitution, and arithmetic
|
|
expansion.
|
|
|
|
There may be an arbitrary number of `case' clauses, each terminated
|
|
by a `;;', `;&', or `;;&'. The first pattern that matches
|
|
determines the command-list that is executed. It's a common idiom
|
|
to use `*' as the final pattern to define the default case, since
|
|
that pattern will always match.
|
|
|
|
Here is an example using `case' in a script that could be used to
|
|
describe one interesting feature of an animal:
|
|
|
|
echo -n "Enter the name of an animal: "
|
|
read ANIMAL
|
|
echo -n "The $ANIMAL has "
|
|
case $ANIMAL in
|
|
horse | dog | cat) echo -n "four";;
|
|
man | kangaroo ) echo -n "two";;
|
|
*) echo -n "an unknown number of";;
|
|
esac
|
|
echo " legs."
|
|
|
|
If the `;;' operator is used, no subsequent matches are attempted
|
|
after the first pattern match. Using `;&' in place of `;;'
|
|
causes execution to continue with the COMMAND-LIST associated with
|
|
the next clause, if any. Using `;;&' in place of `;;' causes the
|
|
shell to test the patterns in the next clause, if any, and execute
|
|
any associated COMMAND-LIST on a successful match.
|
|
|
|
The return status is zero if no PATTERN is matched. Otherwise, the
|
|
return status is the exit status of the COMMAND-LIST executed.
|
|
|
|
`select'
|
|
The `select' construct allows the easy generation of menus. It
|
|
has almost the same syntax as the `for' command:
|
|
|
|
select NAME [in WORDS ...]; do COMMANDS; done
|
|
|
|
The list of words following `in' is expanded, generating a list of
|
|
items. The set of expanded words is printed on the standard error
|
|
output stream, each preceded by a number. If the `in WORDS' is
|
|
omitted, the positional parameters are printed, as if `in "$@"'
|
|
had been specified. The `PS3' prompt is then displayed and a line
|
|
is read from the standard input. If the line consists of a number
|
|
corresponding to one of the displayed words, then the value of
|
|
NAME is set to that word. If the line is empty, the words and
|
|
prompt are displayed again. If `EOF' is read, the `select'
|
|
command completes. Any other value read causes NAME to be set to
|
|
null. The line read is saved in the variable `REPLY'.
|
|
|
|
The COMMANDS are executed after each selection until a `break'
|
|
command is executed, at which point the `select' command completes.
|
|
|
|
Here is an example that allows the user to pick a filename from the
|
|
current directory, and displays the name and index of the file
|
|
selected.
|
|
|
|
select fname in *;
|
|
do
|
|
echo you picked $fname \($REPLY\)
|
|
break;
|
|
done
|
|
|
|
`((...))'
|
|
(( EXPRESSION ))
|
|
|
|
The arithmetic EXPRESSION is evaluated according to the rules
|
|
described below (*note Shell Arithmetic::). If the value of the
|
|
expression is non-zero, the return status is 0; otherwise the
|
|
return status is 1. This is exactly equivalent to
|
|
let "EXPRESSION"
|
|
*Note Bash Builtins::, for a full description of the `let' builtin.
|
|
|
|
`[[...]]'
|
|
[[ EXPRESSION ]]
|
|
|
|
Return a status of 0 or 1 depending on the evaluation of the
|
|
conditional expression EXPRESSION. Expressions are composed of
|
|
the primaries described below in *note Bash Conditional
|
|
Expressions::. Word splitting and filename expansion are not
|
|
performed on the words between the `[[' and `]]'; tilde expansion,
|
|
parameter and variable expansion, arithmetic expansion, command
|
|
substitution, process substitution, and quote removal are
|
|
performed. Conditional operators such as `-f' must be unquoted to
|
|
be recognized as primaries.
|
|
|
|
When used with `[[', the `<' and `>' operators sort
|
|
lexicographically using the current locale.
|
|
|
|
When the `==' and `!=' operators are used, the string to the right
|
|
of the operator is considered a pattern and matched according to
|
|
the rules described below in *note Pattern Matching::, as if the
|
|
`extglob' shell option were enabled. The `=' operator is
|
|
identical to `=='. If the shell option `nocasematch' (see the
|
|
description of `shopt' in *note The Shopt Builtin::) is enabled,
|
|
the match is performed without regard to the case of alphabetic
|
|
characters. The return value is 0 if the string matches (`==') or
|
|
does not match (`!=')the pattern, and 1 otherwise. Any part of
|
|
the pattern may be quoted to force the quoted portion to be
|
|
matched as a string.
|
|
|
|
An additional binary operator, `=~', is available, with the same
|
|
precedence as `==' and `!='. When it is used, the string to the
|
|
right of the operator is considered an extended regular expression
|
|
and matched accordingly (as in regex3)). The return value is 0 if
|
|
the string matches the pattern, and 1 otherwise. If the regular
|
|
expression is syntactically incorrect, the conditional
|
|
expression's return value is 2. If the shell option `nocasematch'
|
|
(see the description of `shopt' in *note The Shopt Builtin::) is
|
|
enabled, the match is performed without regard to the case of
|
|
alphabetic characters. Any part of the pattern may be quoted to
|
|
force the quoted portion to be matched as a string. Bracket
|
|
expressions in regular expressions must be treated carefully,
|
|
since normal quoting characters lose their meanings between
|
|
brackets. If the pattern is stored in a shell variable, quoting
|
|
the variable expansion forces the entire pattern to be matched as
|
|
a string. Substrings matched by parenthesized subexpressions
|
|
within the regular expression are saved in the array variable
|
|
`BASH_REMATCH'. The element of `BASH_REMATCH' with index 0 is the
|
|
portion of the string matching the entire regular expression. The
|
|
element of `BASH_REMATCH' with index N is the portion of the
|
|
string matching the Nth parenthesized subexpression.
|
|
|
|
For example, the following will match a line (stored in the shell
|
|
variable LINE) if there is a sequence of characters in the value
|
|
consisting of any number, including zero, of space characters,
|
|
zero or one instances of `a', then a `b':
|
|
[[ $line =~ [[:space:]]*(a)?b ]]
|
|
|
|
That means values like `aab' and ` aaaaaab' will match, as will a
|
|
line containing a `b' anywhere in its value.
|
|
|
|
Storing the regular expression in a shell variable is often a
|
|
useful way to avoid problems with quoting characters that are
|
|
special to the shell. It is sometimes difficult to specify a
|
|
regular expression literally without using quotes, or to keep
|
|
track of the quoting used by regular expressions while paying
|
|
attention to the shell's quote removal. Using a shell variable to
|
|
store the pattern decreases these problems. For example, the
|
|
following is equivalent to the above:
|
|
pattern='[[:space:]]*(a)?b'
|
|
[[ $line =~ $pattern ]]
|
|
|
|
If you want to match a character that's special to the regular
|
|
expression grammar, it has to be quoted to remove its special
|
|
meaning. This means that in the pattern `xxx.txt', the `.'
|
|
matches any character in the string (its usual regular expression
|
|
meaning), but in the pattern `"xxx.txt"' it can only match a
|
|
literal `.'. Shell programmers should take special care with
|
|
backslashes, since backslashes are used both by the shell and
|
|
regular expressions to remove the special meaning from the
|
|
following character. The following two sets of commands are _not_
|
|
equivalent:
|
|
pattern='\.'
|
|
|
|
[[ . =~ $pattern ]]
|
|
[[ . =~ \. ]]
|
|
|
|
[[ . =~ "$pattern" ]]
|
|
[[ . =~ '\.' ]]
|
|
|
|
The first two matches will succeed, but the second two will not,
|
|
because in the second two the backslash will be part of the
|
|
pattern to be matched. In the first two examples, the backslash
|
|
removes the special meaning from `.', so the literal `.' matches.
|
|
If the string in the first examples were anything other than `.',
|
|
say `a', the pattern would not match, because the quoted `.' in the
|
|
pattern loses its special meaning of matching any single character.
|
|
|
|
Expressions may be combined using the following operators, listed
|
|
in decreasing order of precedence:
|
|
|
|
`( EXPRESSION )'
|
|
Returns the value of EXPRESSION. This may be used to
|
|
override the normal precedence of operators.
|
|
|
|
`! EXPRESSION'
|
|
True if EXPRESSION is false.
|
|
|
|
`EXPRESSION1 && EXPRESSION2'
|
|
True if both EXPRESSION1 and EXPRESSION2 are true.
|
|
|
|
`EXPRESSION1 || EXPRESSION2'
|
|
True if either EXPRESSION1 or EXPRESSION2 is true.
|
|
|
|
The `&&' and `||' operators do not evaluate EXPRESSION2 if the
|
|
value of EXPRESSION1 is sufficient to determine the return value
|
|
of the entire conditional expression.
|
|
|
|
|
|
File: bashref.info, Node: Command Grouping, Prev: Conditional Constructs, Up: Compound Commands
|
|
|
|
3.2.4.3 Grouping Commands
|
|
.........................
|
|
|
|
Bash provides two ways to group a list of commands to be executed as a
|
|
unit. When commands are grouped, redirections may be applied to the
|
|
entire command list. For example, the output of all the commands in
|
|
the list may be redirected to a single stream.
|
|
|
|
`()'
|
|
( LIST )
|
|
|
|
Placing a list of commands between parentheses causes a subshell
|
|
environment to be created (*note Command Execution Environment::),
|
|
and each of the commands in LIST to be executed in that subshell.
|
|
Since the LIST is executed in a subshell, variable assignments do
|
|
not remain in effect after the subshell completes.
|
|
|
|
`{}'
|
|
{ LIST; }
|
|
|
|
Placing a list of commands between curly braces causes the list to
|
|
be executed in the current shell context. No subshell is created.
|
|
The semicolon (or newline) following LIST is required.
|
|
|
|
In addition to the creation of a subshell, there is a subtle
|
|
difference between these two constructs due to historical reasons. The
|
|
braces are `reserved words', so they must be separated from the LIST by
|
|
`blank's or other shell metacharacters. The parentheses are
|
|
`operators', and are recognized as separate tokens by the shell even if
|
|
they are not separated from the LIST by whitespace.
|
|
|
|
The exit status of both of these constructs is the exit status of
|
|
LIST.
|
|
|
|
|
|
File: bashref.info, Node: Coprocesses, Next: GNU Parallel, Prev: Compound Commands, Up: Shell Commands
|
|
|
|
3.2.5 Coprocesses
|
|
-----------------
|
|
|
|
A `coprocess' is a shell command preceded by the `coproc' reserved word.
|
|
A coprocess is executed asynchronously in a subshell, as if the command
|
|
had been terminated with the `&' control operator, with a two-way pipe
|
|
established between the executing shell and the coprocess.
|
|
|
|
The format for a coprocess is:
|
|
coproc [NAME] COMMAND [REDIRECTIONS]
|
|
|
|
This creates a coprocess named NAME. If NAME is not supplied, the
|
|
default name is COPROC. NAME must not be supplied if COMMAND is a
|
|
simple command (*note Simple Commands::); otherwise, it is interpreted
|
|
as the first word of the simple command.
|
|
|
|
When the coprocess is executed, the shell creates an array variable
|
|
(*note Arrays::) named `NAME' in the context of the executing shell.
|
|
The standard output of COMMAND is connected via a pipe to a file
|
|
descriptor in the executing shell, and that file descriptor is assigned
|
|
to `NAME'[0]. The standard input of COMMAND is connected via a pipe to
|
|
a file descriptor in the executing shell, and that file descriptor is
|
|
assigned to `NAME'[1]. This pipe is established before any
|
|
redirections specified by the command (*note Redirections::). The file
|
|
descriptors can be utilized as arguments to shell commands and
|
|
redirections using standard word expansions. The file descriptors are
|
|
not available in subshells.
|
|
|
|
The process ID of the shell spawned to execute the coprocess is
|
|
available as the value of the variable `NAME'_PID. The `wait' builtin
|
|
command may be used to wait for the coprocess to terminate.
|
|
|
|
Since the coprocess is created as an asynchronous command, the
|
|
`coproc' command always returns success. The return status of a
|
|
coprocess is the exit status of COMMAND.
|
|
|
|
|
|
File: bashref.info, Node: GNU Parallel, Prev: Coprocesses, Up: Shell Commands
|
|
|
|
3.2.6 GNU Parallel
|
|
------------------
|
|
|
|
There are ways to run commands in parallel that are not built into Bash.
|
|
GNU Parallel is a tool to do just that.
|
|
|
|
GNU Parallel, as its name suggests, can be used to build and run
|
|
commands in parallel. You may run the same command with different
|
|
arguments, whether they are filenames, usernames, hostnames, or lines
|
|
read from files. GNU Parallel provides shorthand references to many of
|
|
the most common operations (input lines, various portions of the input
|
|
line, different ways to specify the input source, and so on). Parallel
|
|
can replace `xargs' or feed commands from its input sources to several
|
|
different instances of Bash.
|
|
|
|
For a complete description, refer to the GNU Parallel documentation.
|
|
A few examples should provide a brief introduction to its use.
|
|
|
|
For example, it is easy to replace `xargs' to gzip all html files in
|
|
the current directory and its subdirectories:
|
|
find . -type f -name '*.html' -print | parallel gzip
|
|
If you need to protect special characters such as newlines in file
|
|
names, use find's `-print0' option and parallel's `-0' option.
|
|
|
|
You can use Parallel to move files from the current directory when
|
|
the number of files is too large to process with one `mv' invocation:
|
|
ls | parallel mv {} destdir
|
|
|
|
As you can see, the {} is replaced with each line read from standard
|
|
input. While using `ls' will work in most instances, it is not
|
|
sufficient to deal with all filenames. If you need to accommodate
|
|
special characters in filenames, you can use
|
|
|
|
find . -depth 1 \! -name '.*' -print0 | parallel -0 mv {} destdir
|
|
|
|
as alluded to above.
|
|
|
|
This will run as many `mv' commands as there are files in the current
|
|
directory. You can emulate a parallel `xargs' by adding the `-X'
|
|
option:
|
|
find . -depth 1 \! -name '.*' -print0 | parallel -0 -X mv {} destdir
|
|
|
|
GNU Parallel can replace certain common idioms that operate on lines
|
|
read from a file (in this case, filenames listed one per line):
|
|
while IFS= read -r x; do
|
|
do-something1 "$x" "config-$x"
|
|
do-something2 < "$x"
|
|
done < file | process-output
|
|
|
|
with a more compact syntax reminiscent of lambdas:
|
|
cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" | process-output
|
|
|
|
Parallel provides a built-in mechanism to remove filename
|
|
extensions, which lends itself to batch file transformations or
|
|
renaming:
|
|
ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}"
|
|
This will recompress all files in the current directory with names
|
|
ending in .gz using bzip2, running one job per CPU (-j+0) in parallel.
|
|
(We use `ls' for brevity here; using `find' as above is more robust in
|
|
the face of filenames containing unexpected characters.) Parallel can
|
|
take arguments from the command line; the above can also be written as
|
|
|
|
parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz
|
|
|
|
If a command generates output, you may want to preserve the input
|
|
order in the output. For instance, the following command
|
|
{ echo foss.org.my ; echo debian.org; echo freenetproject.org; } | parallel traceroute
|
|
will display as output the traceroute invocation that finishes first.
|
|
Adding the `-k' option
|
|
{ echo foss.org.my ; echo debian.org; echo freenetproject.org; } | parallel -k traceroute
|
|
will ensure that the output of `traceroute foss.org.my' is displayed
|
|
first.
|
|
|
|
Finally, Parallel can be used to run a sequence of shell commands in
|
|
parallel, similar to `cat file | bash'. It is not uncommon to take a
|
|
list of filenames, create a series of shell commands to operate on
|
|
them, and feed that list of commnds to a shell. Parallel can speed
|
|
this up. Assuming that `file' contains a list of shell commands, one
|
|
per line,
|
|
|
|
parallel -j 10 < file
|
|
|
|
will evaluate the commands using the shell (since no explicit command is
|
|
supplied as an argument), in blocks of ten shell jobs at a time.
|
|
|
|
|
|
File: bashref.info, Node: Shell Functions, Next: Shell Parameters, Prev: Shell Commands, Up: Basic Shell Features
|
|
|
|
3.3 Shell Functions
|
|
===================
|
|
|
|
Shell functions are a way to group commands for later execution using a
|
|
single name for the group. They are executed just like a "regular"
|
|
command. When the name of a shell function is used as a simple command
|
|
name, the list of commands associated with that function name is
|
|
executed. Shell functions are executed in the current shell context;
|
|
no new process is created to interpret them.
|
|
|
|
Functions are declared using this syntax:
|
|
NAME () COMPOUND-COMMAND [ REDIRECTIONS ]
|
|
|
|
or
|
|
|
|
function NAME [()] COMPOUND-COMMAND [ REDIRECTIONS ]
|
|
|
|
This defines a shell function named NAME. The reserved word
|
|
`function' is optional. If the `function' reserved word is supplied,
|
|
the parentheses are optional. The BODY of the function is the compound
|
|
command COMPOUND-COMMAND (*note Compound Commands::). That command is
|
|
usually a LIST enclosed between { and }, but may be any compound
|
|
command listed above. COMPOUND-COMMAND is executed whenever NAME is
|
|
specified as the name of a command. When the shell is in POSIX mode
|
|
(*note Bash POSIX Mode::), NAME may not be the same as one of the
|
|
special builtins (*note Special Builtins::). Any redirections (*note
|
|
Redirections::) associated with the shell function are performed when
|
|
the function is executed.
|
|
|
|
A function definition may be deleted using the `-f' option to the
|
|
`unset' builtin (*note Bourne Shell Builtins::).
|
|
|
|
The exit status of a function definition is zero unless a syntax
|
|
error occurs or a readonly function with the same name already exists.
|
|
When executed, the exit status of a function is the exit status of the
|
|
last command executed in the body.
|
|
|
|
Note that for historical reasons, in the most common usage the curly
|
|
braces that surround the body of the function must be separated from
|
|
the body by `blank's or newlines. This is because the braces are
|
|
reserved words and are only recognized as such when they are separated
|
|
from the command list by whitespace or another shell metacharacter.
|
|
Also, when using the braces, the LIST must be terminated by a semicolon,
|
|
a `&', or a newline.
|
|
|
|
When a function is executed, the arguments to the function become
|
|
the positional parameters during its execution (*note Positional
|
|
Parameters::). The special parameter `#' that expands to the number of
|
|
positional parameters is updated to reflect the change. Special
|
|
parameter `0' is unchanged. The first element of the `FUNCNAME'
|
|
variable is set to the name of the function while the function is
|
|
executing.
|
|
|
|
All other aspects of the shell execution environment are identical
|
|
between a function and its caller with these exceptions: the `DEBUG'
|
|
and `RETURN' traps are not inherited unless the function has been given
|
|
the `trace' attribute using the `declare' builtin or the `-o functrace'
|
|
option has been enabled with the `set' builtin, (in which case all
|
|
functions inherit the `DEBUG' and `RETURN' traps), and the `ERR' trap
|
|
is not inherited unless the `-o errtrace' shell option has been enabled.
|
|
*Note Bourne Shell Builtins::, for the description of the `trap'
|
|
builtin.
|
|
|
|
The `FUNCNEST' variable, if set to a numeric value greater than 0,
|
|
defines a maximum function nesting level. Function invocations that
|
|
exceed the limit cause the entire command to abort.
|
|
|
|
If the builtin command `return' is executed in a function, the
|
|
function completes and execution resumes with the next command after
|
|
the function call. Any command associated with the `RETURN' trap is
|
|
executed before execution resumes. When a function completes, the
|
|
values of the positional parameters and the special parameter `#' are
|
|
restored to the values they had prior to the function's execution. If
|
|
a numeric argument is given to `return', that is the function's return
|
|
status; otherwise the function's return status is the exit status of
|
|
the last command executed before the `return'.
|
|
|
|
Variables local to the function may be declared with the `local'
|
|
builtin. These variables are visible only to the function and the
|
|
commands it invokes.
|
|
|
|
Function names and definitions may be listed with the `-f' option to
|
|
the `declare' (`typeset') builtin command (*note Bash Builtins::). The
|
|
`-F' option to `declare' or `typeset' will list the function names only
|
|
(and optionally the source file and line number, if the `extdebug'
|
|
shell option is enabled). Functions may be exported so that subshells
|
|
automatically have them defined with the `-f' option to the `export'
|
|
builtin (*note Bourne Shell Builtins::). Note that shell functions and
|
|
variables with the same name may result in multiple identically-named
|
|
entries in the environment passed to the shell's children. Care should
|
|
be taken in cases where this may cause a problem.
|
|
|
|
Functions may be recursive. The `FUNCNEST' variable may be used to
|
|
limit the depth of the function call stack and restrict the number of
|
|
function invocations. By default, no limit is placed on the number of
|
|
recursive calls.
|
|
|
|
|
|
File: bashref.info, Node: Shell Parameters, Next: Shell Expansions, Prev: Shell Functions, Up: Basic Shell Features
|
|
|
|
3.4 Shell Parameters
|
|
====================
|
|
|
|
* Menu:
|
|
|
|
* Positional Parameters:: The shell's command-line arguments.
|
|
* Special Parameters:: Parameters denoted by special characters.
|
|
|
|
A PARAMETER is an entity that stores values. It can be a `name', a
|
|
number, or one of the special characters listed below. A VARIABLE is a
|
|
parameter denoted by a `name'. A variable has a VALUE and zero or more
|
|
ATTRIBUTES. Attributes are assigned using the `declare' builtin command
|
|
(see the description of the `declare' builtin in *note Bash Builtins::).
|
|
|
|
A parameter is set if it has been assigned a value. The null string
|
|
is a valid value. Once a variable is set, it may be unset only by using
|
|
the `unset' builtin command.
|
|
|
|
A variable may be assigned to by a statement of the form
|
|
NAME=[VALUE]
|
|
If VALUE is not given, the variable is assigned the null string. All
|
|
VALUEs undergo tilde expansion, parameter and variable expansion,
|
|
command substitution, arithmetic expansion, and quote removal (detailed
|
|
below). If the variable has its `integer' attribute set, then VALUE is
|
|
evaluated as an arithmetic expression even if the `$((...))' expansion
|
|
is not used (*note Arithmetic Expansion::). Word splitting is not
|
|
performed, with the exception of `"$@"' as explained below. Filename
|
|
expansion is not performed. Assignment statements may also appear as
|
|
arguments to the `alias', `declare', `typeset', `export', `readonly',
|
|
and `local' builtin commands. When in POSIX mode (*note Bash POSIX
|
|
Mode::), these builtins may appear in a command after one or more
|
|
instances of the `command' builtin and retain these assignment
|
|
statement properties.
|
|
|
|
In the context where an assignment statement is assigning a value to
|
|
a shell variable or array index (*note Arrays::), the `+=' operator can
|
|
be used to append to or add to the variable's previous value. When
|
|
`+=' is applied to a variable for which the INTEGER attribute has been
|
|
set, VALUE is evaluated as an arithmetic expression and added to the
|
|
variable's current value, which is also evaluated. When `+=' is
|
|
applied to an array variable using compound assignment (*note
|
|
Arrays::), the variable's value is not unset (as it is when using `='),
|
|
and new values are appended to the array beginning at one greater than
|
|
the array's maximum index (for indexed arrays), or added as additional
|
|
key-value pairs in an associative array. When applied to a
|
|
string-valued variable, VALUE is expanded and appended to the
|
|
variable's value.
|
|
|
|
A variable can be assigned the NAMEREF attribute using the `-n'
|
|
option to the \fBdeclare\fP or \fBlocal\fP builtin commands (*note Bash
|
|
Builtins::) to create a NAMEREF, or a reference to another variable.
|
|
This allows variables to be manipulated indirectly. Whenever the
|
|
nameref variable is referenced or assigned to, the operation is
|
|
actually performed on the variable specified by the nameref variable's
|
|
value. A nameref is commonly used within shell functions to refer to a
|
|
variable whose name is passed as an argument to the function. For
|
|
instance, if a variable name is passed to a shell function as its first
|
|
argument, running
|
|
declare -n ref=$1
|
|
inside the function creates a nameref variable REF whose value is
|
|
the variable name passed as the first argument. References and
|
|
assignments to REF are treated as references and assignments to the
|
|
variable whose name was passed as `$1'.
|
|
|
|
If the control variable in a `for' loop has the nameref attribute,
|
|
the list of words can be a list of shell variables, and a name reference
|
|
will be established for each word in the list, in turn, when the loop is
|
|
executed. Array variables cannot be given the `-n' attribute.
|
|
However, nameref variables can reference array variables and subscripted
|
|
array variables. Namerefs can be unset using the `-n' option to the
|
|
`unset' builtin (*note Bourne Shell Builtins::). Otherwise, if `unset'
|
|
is executed with the name of a nameref variable as an argument, the
|
|
variable referenced by the nameref variable will be unset.
|
|
|
|
|
|
File: bashref.info, Node: Positional Parameters, Next: Special Parameters, Up: Shell Parameters
|
|
|
|
3.4.1 Positional Parameters
|
|
---------------------------
|
|
|
|
A POSITIONAL PARAMETER is a parameter denoted by one or more digits,
|
|
other than the single digit `0'. Positional parameters are assigned
|
|
from the shell's arguments when it is invoked, and may be reassigned
|
|
using the `set' builtin command. Positional parameter `N' may be
|
|
referenced as `${N}', or as `$N' when `N' consists of a single digit.
|
|
Positional parameters may not be assigned to with assignment statements.
|
|
The `set' and `shift' builtins are used to set and unset them (*note
|
|
Shell Builtin Commands::). The positional parameters are temporarily
|
|
replaced when a shell function is executed (*note Shell Functions::).
|
|
|
|
When a positional parameter consisting of more than a single digit
|
|
is expanded, it must be enclosed in braces.
|
|
|
|
|
|
File: bashref.info, Node: Special Parameters, Prev: Positional Parameters, Up: Shell Parameters
|
|
|
|
3.4.2 Special Parameters
|
|
------------------------
|
|
|
|
The shell treats several parameters specially. These parameters may
|
|
only be referenced; assignment to them is not allowed.
|
|
|
|
`*'
|
|
Expands to the positional parameters, starting from one. When the
|
|
expansion occurs within double quotes, it expands to a single word
|
|
with the value of each parameter separated by the first character
|
|
of the `IFS' special variable. That is, `"$*"' is equivalent to
|
|
`"$1C$2C..."', where C is the first character of the value of the
|
|
`IFS' variable. If `IFS' is unset, the parameters are separated
|
|
by spaces. If `IFS' is null, the parameters are joined without
|
|
intervening separators.
|
|
|
|
`@'
|
|
Expands to the positional parameters, starting from one. When the
|
|
expansion occurs within double quotes, each parameter expands to a
|
|
separate word. That is, `"$@"' is equivalent to `"$1" "$2" ...'.
|
|
If the double-quoted expansion occurs within a word, the expansion
|
|
of the first parameter is joined with the beginning part of the
|
|
original word, and the expansion of the last parameter is joined
|
|
with the last part of the original word. When there are no
|
|
positional parameters, `"$@"' and `$@' expand to nothing (i.e.,
|
|
they are removed).
|
|
|
|
`#'
|
|
Expands to the number of positional parameters in decimal.
|
|
|
|
`?'
|
|
Expands to the exit status of the most recently executed foreground
|
|
pipeline.
|
|
|
|
`-'
|
|
(A hyphen.) Expands to the current option flags as specified upon
|
|
invocation, by the `set' builtin command, or those set by the
|
|
shell itself (such as the `-i' option).
|
|
|
|
`$'
|
|
Expands to the process ID of the shell. In a `()' subshell, it
|
|
expands to the process ID of the invoking shell, not the subshell.
|
|
|
|
`!'
|
|
Expands to the process ID of the job most recently placed into the
|
|
background, whether executed as an asynchronous command or using
|
|
the `bg' builtin (*note Job Control Builtins::).
|
|
|
|
`0'
|
|
Expands to the name of the shell or shell script. This is set at
|
|
shell initialization. If Bash is invoked with a file of commands
|
|
(*note Shell Scripts::), `$0' is set to the name of that file. If
|
|
Bash is started with the `-c' option (*note Invoking Bash::), then
|
|
`$0' is set to the first argument after the string to be executed,
|
|
if one is present. Otherwise, it is set to the filename used to
|
|
invoke Bash, as given by argument zero.
|
|
|
|
`_'
|
|
(An underscore.) At shell startup, set to the absolute pathname
|
|
used to invoke the shell or shell script being executed as passed
|
|
in the environment or argument list. Subsequently, expands to the
|
|
last argument to the previous command, after expansion. Also set
|
|
to the full pathname used to invoke each command executed and
|
|
placed in the environment exported to that command. When checking
|
|
mail, this parameter holds the name of the mail file.
|
|
|
|
|
|
File: bashref.info, Node: Shell Expansions, Next: Redirections, Prev: Shell Parameters, Up: Basic Shell Features
|
|
|
|
3.5 Shell Expansions
|
|
====================
|
|
|
|
Expansion is performed on the command line after it has been split into
|
|
`token's. There are seven kinds of expansion performed:
|
|
|
|
* brace expansion
|
|
|
|
* tilde expansion
|
|
|
|
* parameter and variable expansion
|
|
|
|
* command substitution
|
|
|
|
* arithmetic expansion
|
|
|
|
* word splitting
|
|
|
|
* filename expansion
|
|
|
|
* Menu:
|
|
|
|
* Brace Expansion:: Expansion of expressions within braces.
|
|
* Tilde Expansion:: Expansion of the ~ character.
|
|
* Shell Parameter Expansion:: How Bash expands variables to their values.
|
|
* Command Substitution:: Using the output of a command as an argument.
|
|
* Arithmetic Expansion:: How to use arithmetic in shell expansions.
|
|
* Process Substitution:: A way to write and read to and from a
|
|
command.
|
|
* Word Splitting:: How the results of expansion are split into separate
|
|
arguments.
|
|
* Filename Expansion:: A shorthand for specifying filenames matching patterns.
|
|
* Quote Removal:: How and when quote characters are removed from
|
|
words.
|
|
|
|
The order of expansions is: brace expansion, tilde expansion,
|
|
parameter, variable, and arithmetic expansion and command substitution
|
|
(done in a left-to-right fashion), word splitting, and filename
|
|
expansion.
|
|
|
|
On systems that can support it, there is an additional expansion
|
|
available: PROCESS SUBSTITUTION. This is performed at the same time as
|
|
parameter, variable, and arithmetic expansion and command substitution.
|
|
|
|
Only brace expansion, word splitting, and filename expansion can
|
|
change the number of words of the expansion; other expansions expand a
|
|
single word to a single word. The only exceptions to this are the
|
|
expansions of `"$@"' (*note Special Parameters::) and `"${NAME[@]}"'
|
|
(*note Arrays::).
|
|
|
|
After all expansions, `quote removal' (*note Quote Removal::) is
|
|
performed.
|
|
|
|
|
|
File: bashref.info, Node: Brace Expansion, Next: Tilde Expansion, Up: Shell Expansions
|
|
|
|
3.5.1 Brace Expansion
|
|
---------------------
|
|
|
|
Brace expansion is a mechanism by which arbitrary strings may be
|
|
generated. This mechanism is similar to FILENAME EXPANSION (*note
|
|
Filename Expansion::), but the filenames generated need not exist.
|
|
Patterns to be brace expanded take the form of an optional PREAMBLE,
|
|
followed by either a series of comma-separated strings or a sequence
|
|
expression between a pair of braces, followed by an optional POSTSCRIPT.
|
|
The preamble is prefixed to each string contained within the braces, and
|
|
the postscript is then appended to each resulting string, expanding left
|
|
to right.
|
|
|
|
Brace expansions may be nested. The results of each expanded string
|
|
are not sorted; left to right order is preserved. For example,
|
|
bash$ echo a{d,c,b}e
|
|
ade ace abe
|
|
|
|
A sequence expression takes the form `{X..Y[..INCR]}', where X and Y
|
|
are either integers or single characters, and INCR, an optional
|
|
increment, is an integer. When integers are supplied, the expression
|
|
expands to each number between X and Y, inclusive. Supplied integers
|
|
may be prefixed with `0' to force each term to have the same width.
|
|
When either X or Y begins with a zero, the shell attempts to force all
|
|
generated terms to contain the same number of digits, zero-padding
|
|
where necessary. When characters are supplied, the expression expands
|
|
to each character lexicographically between X and Y, inclusive, using
|
|
the default C locale. Note that both X and Y must be of the same type.
|
|
When the increment is supplied, it is used as the difference between
|
|
each term. The default increment is 1 or -1 as appropriate.
|
|
|
|
Brace expansion is performed before any other expansions, and any
|
|
characters special to other expansions are preserved in the result. It
|
|
is strictly textual. Bash does not apply any syntactic interpretation
|
|
to the context of the expansion or the text between the braces. To
|
|
avoid conflicts with parameter expansion, the string `${' is not
|
|
considered eligible for brace expansion.
|
|
|
|
A correctly-formed brace expansion must contain unquoted opening and
|
|
closing braces, and at least one unquoted comma or a valid sequence
|
|
expression. Any incorrectly formed brace expansion is left unchanged.
|
|
|
|
A { or `,' may be quoted with a backslash to prevent its being
|
|
considered part of a brace expression. To avoid conflicts with
|
|
parameter expansion, the string `${' is not considered eligible for
|
|
brace expansion.
|
|
|
|
This construct is typically used as shorthand when the common prefix
|
|
of the strings to be generated is longer than in the above example:
|
|
mkdir /usr/local/src/bash/{old,new,dist,bugs}
|
|
or
|
|
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
|
|
|
|
|
|
File: bashref.info, Node: Tilde Expansion, Next: Shell Parameter Expansion, Prev: Brace Expansion, Up: Shell Expansions
|
|
|
|
3.5.2 Tilde Expansion
|
|
---------------------
|
|
|
|
If a word begins with an unquoted tilde character (`~'), all of the
|
|
characters up to the first unquoted slash (or all characters, if there
|
|
is no unquoted slash) are considered a TILDE-PREFIX. If none of the
|
|
characters in the tilde-prefix are quoted, the characters in the
|
|
tilde-prefix following the tilde are treated as a possible LOGIN NAME.
|
|
If this login name is the null string, the tilde is replaced with the
|
|
value of the `HOME' shell variable. If `HOME' is unset, the home
|
|
directory of the user executing the shell is substituted instead.
|
|
Otherwise, the tilde-prefix is replaced with the home directory
|
|
associated with the specified login name.
|
|
|
|
If the tilde-prefix is `~+', the value of the shell variable `PWD'
|
|
replaces the tilde-prefix. If the tilde-prefix is `~-', the value of
|
|
the shell variable `OLDPWD', if it is set, is substituted.
|
|
|
|
If the characters following the tilde in the tilde-prefix consist of
|
|
a number N, optionally prefixed by a `+' or a `-', the tilde-prefix is
|
|
replaced with the corresponding element from the directory stack, as it
|
|
would be displayed by the `dirs' builtin invoked with the characters
|
|
following tilde in the tilde-prefix as an argument (*note The Directory
|
|
Stack::). If the tilde-prefix, sans the tilde, consists of a number
|
|
without a leading `+' or `-', `+' is assumed.
|
|
|
|
If the login name is invalid, or the tilde expansion fails, the word
|
|
is left unchanged.
|
|
|
|
Each variable assignment is checked for unquoted tilde-prefixes
|
|
immediately following a `:' or the first `='. In these cases, tilde
|
|
expansion is also performed. Consequently, one may use filenames with
|
|
tildes in assignments to `PATH', `MAILPATH', and `CDPATH', and the
|
|
shell assigns the expanded value.
|
|
|
|
The following table shows how Bash treats unquoted tilde-prefixes:
|
|
|
|
`~'
|
|
The value of `$HOME'
|
|
|
|
`~/foo'
|
|
`$HOME/foo'
|
|
|
|
`~fred/foo'
|
|
The subdirectory `foo' of the home directory of the user `fred'
|
|
|
|
`~+/foo'
|
|
`$PWD/foo'
|
|
|
|
`~-/foo'
|
|
`${OLDPWD-'~-'}/foo'
|
|
|
|
`~N'
|
|
The string that would be displayed by `dirs +N'
|
|
|
|
`~+N'
|
|
The string that would be displayed by `dirs +N'
|
|
|
|
`~-N'
|
|
The string that would be displayed by `dirs -N'
|
|
|
|
|
|
File: bashref.info, Node: Shell Parameter Expansion, Next: Command Substitution, Prev: Tilde Expansion, Up: Shell Expansions
|
|
|
|
3.5.3 Shell Parameter Expansion
|
|
-------------------------------
|
|
|
|
The `$' character introduces parameter expansion, command substitution,
|
|
or arithmetic expansion. The parameter name or symbol to be expanded
|
|
may be enclosed in braces, which are optional but serve to protect the
|
|
variable to be expanded from characters immediately following it which
|
|
could be interpreted as part of the name.
|
|
|
|
When braces are used, the matching ending brace is the first `}' not
|
|
escaped by a backslash or within a quoted string, and not within an
|
|
embedded arithmetic expansion, command substitution, or parameter
|
|
expansion.
|
|
|
|
The basic form of parameter expansion is ${PARAMETER}. The value of
|
|
PARAMETER is substituted. The PARAMETER is a shell parameter as
|
|
described above (*note Shell Parameters::) or an array reference (*note
|
|
Arrays::). The braces are required when PARAMETER is a positional
|
|
parameter with more than one digit, or when PARAMETER is followed by a
|
|
character that is not to be interpreted as part of its name.
|
|
|
|
If the first character of PARAMETER is an exclamation point (!), it
|
|
introduces a level of variable indirection. Bash uses the value of the
|
|
variable formed from the rest of PARAMETER as the name of the variable;
|
|
this variable is then expanded and that value is used in the rest of
|
|
the substitution, rather than the value of PARAMETER itself. This is
|
|
known as `indirect expansion'. The exceptions to this are the
|
|
expansions of ${!PREFIX*} and ${!NAME[@]} described below. The
|
|
exclamation point must immediately follow the left brace in order to
|
|
introduce indirection.
|
|
|
|
In each of the cases below, WORD is subject to tilde expansion,
|
|
parameter expansion, command substitution, and arithmetic expansion.
|
|
|
|
When not performing substring expansion, using the form described
|
|
below (e.g., `:-'), Bash tests for a parameter that is unset or null.
|
|
Omitting the colon results in a test only for a parameter that is unset.
|
|
Put another way, if the colon is included, the operator tests for both
|
|
PARAMETER's existence and that its value is not null; if the colon is
|
|
omitted, the operator tests only for existence.
|
|
|
|
`${PARAMETER:-WORD}'
|
|
If PARAMETER is unset or null, the expansion of WORD is
|
|
substituted. Otherwise, the value of PARAMETER is substituted.
|
|
|
|
`${PARAMETER:=WORD}'
|
|
If PARAMETER is unset or null, the expansion of WORD is assigned
|
|
to PARAMETER. The value of PARAMETER is then substituted.
|
|
Positional parameters and special parameters may not be assigned to
|
|
in this way.
|
|
|
|
`${PARAMETER:?WORD}'
|
|
If PARAMETER is null or unset, the expansion of WORD (or a message
|
|
to that effect if WORD is not present) is written to the standard
|
|
error and the shell, if it is not interactive, exits. Otherwise,
|
|
the value of PARAMETER is substituted.
|
|
|
|
`${PARAMETER:+WORD}'
|
|
If PARAMETER is null or unset, nothing is substituted, otherwise
|
|
the expansion of WORD is substituted.
|
|
|
|
`${PARAMETER:OFFSET}'
|
|
`${PARAMETER:OFFSET:LENGTH}'
|
|
This is referred to as Substring Expansion. It expands to up to
|
|
LENGTH characters of the value of PARAMETER starting at the
|
|
character specified by OFFSET. If PARAMETER is `@', an indexed
|
|
array subscripted by `@' or `*', or an associative array name, the
|
|
results differ as described below. If LENGTH is omitted, it
|
|
expands to the substring of the value of PARAMETER starting at the
|
|
character specified by OFFSET and extending to the end of the
|
|
value. LENGTH and OFFSET are arithmetic expressions (*note Shell
|
|
Arithmetic::).
|
|
|
|
If OFFSET evaluates to a number less than zero, the value is used
|
|
as an offset in characters from the end of the value of PARAMETER.
|
|
If LENGTH evaluates to a number less than zero, it is interpreted
|
|
as an offset in characters from the end of the value of PARAMETER
|
|
rather than a number of characters, and the expansion is the
|
|
characters between OFFSET and that result. Note that a negative
|
|
offset must be separated from the colon by at least one space to
|
|
avoid being confused with the `:-' expansion.
|
|
|
|
Here are some examples illustrating substring expansion on
|
|
parameters and subscripted arrays:
|
|
|
|
$ string=01234567890abcdefgh
|
|
$ echo ${string:7}
|
|
7890abcdefgh
|
|
$ echo ${string:7:0}
|
|
|
|
$ echo ${string:7:2}
|
|
78
|
|
$ echo ${string:7:-2}
|
|
7890abcdef
|
|
$ echo ${string: -7}
|
|
bcdefgh
|
|
$ echo ${string: -7:0}
|
|
|
|
$ echo ${string: -7:2}
|
|
bc
|
|
$ echo ${string: -7:-2}
|
|
bcdef
|
|
$ set -- 01234567890abcdefgh
|
|
$ echo ${1:7}
|
|
7890abcdefgh
|
|
$ echo ${1:7:0}
|
|
|
|
$ echo ${1:7:2}
|
|
78
|
|
$ echo ${1:7:-2}
|
|
7890abcdef
|
|
$ echo ${1: -7}
|
|
bcdefgh
|
|
$ echo ${1: -7:0}
|
|
|
|
$ echo ${1: -7:2}
|
|
bc
|
|
$ echo ${1: -7:-2}
|
|
bcdef
|
|
$ array[0]=01234567890abcdefgh
|
|
$ echo ${array[0]:7}
|
|
7890abcdefgh
|
|
$ echo ${array[0]:7:0}
|
|
|
|
$ echo ${array[0]:7:2}
|
|
78
|
|
$ echo ${array[0]:7:-2}
|
|
7890abcdef
|
|
$ echo ${array[0]: -7}
|
|
bcdefgh
|
|
$ echo ${array[0]: -7:0}
|
|
|
|
$ echo ${array[0]: -7:2}
|
|
bc
|
|
$ echo ${array[0]: -7:-2}
|
|
bcdef
|
|
|
|
If PARAMETER is `@', the result is LENGTH positional parameters
|
|
beginning at OFFSET. A negative OFFSET is taken relative to one
|
|
greater than the greatest positional parameter, so an offset of -1
|
|
evaluates to the last positional parameter. It is an expansion
|
|
error if LENGTH evaluates to a number less than zero.
|
|
|
|
The following examples illustrate substring expansion using
|
|
positional parameters:
|
|
|
|
$ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
|
|
$ echo ${@:7}
|
|
7 8 9 0 a b c d e f g h
|
|
$ echo ${@:7:0}
|
|
|
|
$ echo ${@:7:2}
|
|
7 8
|
|
$ echo ${@:7:-2}
|
|
bash: -2: substring expression < 0
|
|
$ echo ${@: -7:2}
|
|
b c
|
|
$ echo ${@:0}
|
|
./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
|
|
$ echo ${@:0:2}
|
|
./bash 1
|
|
$ echo ${@: -7:0}
|
|
|
|
If PARAMETER is an indexed array name subscripted by `@' or `*',
|
|
the result is the LENGTH members of the array beginning with
|
|
`${PARAMETER[OFFSET]}'. A negative OFFSET is taken relative to
|
|
one greater than the maximum index of the specified array. It is
|
|
an expansion error if LENGTH evaluates to a number less than zero.
|
|
|
|
These examples show how you can use substring expansion with
|
|
indexed arrays:
|
|
|
|
$ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
|
|
$ echo ${array[@]:7}
|
|
7 8 9 0 a b c d e f g h
|
|
$ echo ${array[@]:7:2}
|
|
7 8
|
|
$ echo ${array[@]: -7:2}
|
|
b c
|
|
$ echo ${array[@]: -7:-2}
|
|
bash: -2: substring expression < 0
|
|
$ echo ${array[@]:0}
|
|
0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
|
|
$ echo ${array[@]:0:2}
|
|
0 1
|
|
$ echo ${array[@]: -7:0}
|
|
|
|
Substring expansion applied to an associative array produces
|
|
undefined results.
|
|
|
|
Substring indexing is zero-based unless the positional parameters
|
|
are used, in which case the indexing starts at 1 by default. If
|
|
OFFSET is 0, and the positional parameters are used, `$@' is
|
|
prefixed to the list.
|
|
|
|
`${!PREFIX*}'
|
|
`${!PREFIX@}'
|
|
Expands to the names of variables whose names begin with PREFIX,
|
|
separated by the first character of the `IFS' special variable.
|
|
When `@' is used and the expansion appears within double quotes,
|
|
each variable name expands to a separate word.
|
|
|
|
`${!NAME[@]}'
|
|
`${!NAME[*]}'
|
|
If NAME is an array variable, expands to the list of array indices
|
|
(keys) assigned in NAME. If NAME is not an array, expands to 0 if
|
|
NAME is set and null otherwise. When `@' is used and the
|
|
expansion appears within double quotes, each key expands to a
|
|
separate word.
|
|
|
|
`${#PARAMETER}'
|
|
The length in characters of the expanded value of PARAMETER is
|
|
substituted. If PARAMETER is `*' or `@', the value substituted is
|
|
the number of positional parameters. If PARAMETER is an array
|
|
name subscripted by `*' or `@', the value substituted is the
|
|
number of elements in the array. If PARAMETER is an indexed array
|
|
name subscripted by a negative number, that number is interpreted
|
|
as relative to one greater than the maximum index of PARAMETER, so
|
|
negative indices count back from the end of the array, and an
|
|
index of -1 references the last element.
|
|
|
|
`${PARAMETER#WORD}'
|
|
`${PARAMETER##WORD}'
|
|
The WORD is expanded to produce a pattern just as in filename
|
|
expansion (*note Filename Expansion::). If the pattern matches
|
|
the beginning of the expanded value of PARAMETER, then the result
|
|
of the expansion is the expanded value of PARAMETER with the
|
|
shortest matching pattern (the `#' case) or the longest matching
|
|
pattern (the `##' case) deleted. If PARAMETER is `@' or `*', the
|
|
pattern removal operation is applied to each positional parameter
|
|
in turn, and the expansion is the resultant list. If PARAMETER is
|
|
an array variable subscripted with `@' or `*', the pattern removal
|
|
operation is applied to each member of the array in turn, and the
|
|
expansion is the resultant list.
|
|
|
|
`${PARAMETER%WORD}'
|
|
`${PARAMETER%%WORD}'
|
|
The WORD is expanded to produce a pattern just as in filename
|
|
expansion. If the pattern matches a trailing portion of the
|
|
expanded value of PARAMETER, then the result of the expansion is
|
|
the value of PARAMETER with the shortest matching pattern (the `%'
|
|
case) or the longest matching pattern (the `%%' case) deleted. If
|
|
PARAMETER is `@' or `*', the pattern removal operation is applied
|
|
to each positional parameter in turn, and the expansion is the
|
|
resultant list. If PARAMETER is an array variable subscripted
|
|
with `@' or `*', the pattern removal operation is applied to each
|
|
member of the array in turn, and the expansion is the resultant
|
|
list.
|
|
|
|
`${PARAMETER/PATTERN/STRING}'
|
|
The PATTERN is expanded to produce a pattern just as in filename
|
|
expansion. PARAMETER is expanded and the longest match of PATTERN
|
|
against its value is replaced with STRING. If PATTERN begins with
|
|
`/', all matches of PATTERN are replaced with STRING. Normally
|
|
only the first match is replaced. If PATTERN begins with `#', it
|
|
must match at the beginning of the expanded value of PARAMETER.
|
|
If PATTERN begins with `%', it must match at the end of the
|
|
expanded value of PARAMETER. If STRING is null, matches of
|
|
PATTERN are deleted and the `/' following PATTERN may be omitted.
|
|
If PARAMETER is `@' or `*', the substitution operation is applied
|
|
to each positional parameter in turn, and the expansion is the
|
|
resultant list. If PARAMETER is an array variable subscripted
|
|
with `@' or `*', the substitution operation is applied to each
|
|
member of the array in turn, and the expansion is the resultant
|
|
list.
|
|
|
|
`${PARAMETER^PATTERN}'
|
|
`${PARAMETER^^PATTERN}'
|
|
`${PARAMETER,PATTERN}'
|
|
`${PARAMETER,,PATTERN}'
|
|
This expansion modifies the case of alphabetic characters in
|
|
PARAMETER. The PATTERN is expanded to produce a pattern just as in
|
|
filename expansion. Each character in the expanded value of
|
|
PARAMETER is tested against PATTERN, and, if it matches the
|
|
pattern, its case is converted. The pattern should not attempt to
|
|
match more than one character. The `^' operator converts
|
|
lowercase letters matching PATTERN to uppercase; the `,' operator
|
|
converts matching uppercase letters to lowercase. The `^^' and
|
|
`,,' expansions convert each matched character in the expanded
|
|
value; the `^' and `,' expansions match and convert only the first
|
|
character in the expanded value. If PATTERN is omitted, it is
|
|
treated like a `?', which matches every character. If PARAMETER
|
|
is `@' or `*', the case modification operation is applied to each
|
|
positional parameter in turn, and the expansion is the resultant
|
|
list. If PARAMETER is an array variable subscripted with `@' or
|
|
`*', the case modification operation is applied to each member of
|
|
the array in turn, and the expansion is the resultant list.
|
|
|
|
|
|
File: bashref.info, Node: Command Substitution, Next: Arithmetic Expansion, Prev: Shell Parameter Expansion, Up: Shell Expansions
|
|
|
|
3.5.4 Command Substitution
|
|
--------------------------
|
|
|
|
Command substitution allows the output of a command to replace the
|
|
command itself. Command substitution occurs when a command is enclosed
|
|
as follows:
|
|
$(COMMAND)
|
|
or
|
|
`COMMAND`
|
|
|
|
Bash performs the expansion by executing COMMAND and replacing the
|
|
command substitution with the standard output of the command, with any
|
|
trailing newlines deleted. Embedded newlines are not deleted, but they
|
|
may be removed during word splitting. The command substitution `$(cat
|
|
FILE)' can be replaced by the equivalent but faster `$(< FILE)'.
|
|
|
|
When the old-style backquote form of substitution is used, backslash
|
|
retains its literal meaning except when followed by `$', ``', or `\'.
|
|
The first backquote not preceded by a backslash terminates the command
|
|
substitution. When using the `$(COMMAND)' form, all characters between
|
|
the parentheses make up the command; none are treated specially.
|
|
|
|
Command substitutions may be nested. To nest when using the
|
|
backquoted form, escape the inner backquotes with backslashes.
|
|
|
|
If the substitution appears within double quotes, word splitting and
|
|
filename expansion are not performed on the results.
|
|
|
|
|
|
File: bashref.info, Node: Arithmetic Expansion, Next: Process Substitution, Prev: Command Substitution, Up: Shell Expansions
|
|
|
|
3.5.5 Arithmetic Expansion
|
|
--------------------------
|
|
|
|
Arithmetic expansion allows the evaluation of an arithmetic expression
|
|
and the substitution of the result. The format for arithmetic
|
|
expansion is:
|
|
|
|
$(( EXPRESSION ))
|
|
|
|
The expression is treated as if it were within double quotes, but a
|
|
double quote inside the parentheses is not treated specially. All
|
|
tokens in the expression undergo parameter and variable expansion,
|
|
command substitution, and quote removal. The result is treated as the
|
|
arithmetic expression to be evaluated. Arithmetic expansions may be
|
|
nested.
|
|
|
|
The evaluation is performed according to the rules listed below
|
|
(*note Shell Arithmetic::). If the expression is invalid, Bash prints
|
|
a message indicating failure to the standard error and no substitution
|
|
occurs.
|
|
|
|
|
|
File: bashref.info, Node: Process Substitution, Next: Word Splitting, Prev: Arithmetic Expansion, Up: Shell Expansions
|
|
|
|
3.5.6 Process Substitution
|
|
--------------------------
|
|
|
|
Process substitution is supported on systems that support named pipes
|
|
(FIFOs) or the `/dev/fd' method of naming open files. It takes the
|
|
form of
|
|
<(LIST)
|
|
or
|
|
>(LIST)
|
|
The process LIST is run with its input or output connected to a FIFO
|
|
or some file in `/dev/fd'. The name of this file is passed as an
|
|
argument to the current command as the result of the expansion. If the
|
|
`>(LIST)' form is used, writing to the file will provide input for
|
|
LIST. If the `<(LIST)' form is used, the file passed as an argument
|
|
should be read to obtain the output of LIST. Note that no space may
|
|
appear between the `<' or `>' and the left parenthesis, otherwise the
|
|
construct would be interpreted as a redirection.
|
|
|
|
When available, process substitution is performed simultaneously with
|
|
parameter and variable expansion, command substitution, and arithmetic
|
|
expansion.
|
|
|
|
|
|
File: bashref.info, Node: Word Splitting, Next: Filename Expansion, Prev: Process Substitution, Up: Shell Expansions
|
|
|
|
3.5.7 Word Splitting
|
|
--------------------
|
|
|
|
The shell scans the results of parameter expansion, command
|
|
substitution, and arithmetic expansion that did not occur within double
|
|
quotes for word splitting.
|
|
|
|
The shell treats each character of `$IFS' as a delimiter, and splits
|
|
the results of the other expansions into words using these characters
|
|
as field terminators. If `IFS' is unset, or its value is exactly
|
|
`<space><tab><newline>', the default, then sequences of ` <space>',
|
|
`<tab>', and `<newline>' at the beginning and end of the results of the
|
|
previous expansions are ignored, and any sequence of `IFS' characters
|
|
not at the beginning or end serves to delimit words. If `IFS' has a
|
|
value other than the default, then sequences of the whitespace
|
|
characters `space' and `tab' are ignored at the beginning and end of the
|
|
word, as long as the whitespace character is in the value of `IFS' (an
|
|
`IFS' whitespace character). Any character in `IFS' that is not `IFS'
|
|
whitespace, along with any adjacent `IFS' whitespace characters,
|
|
delimits a field. A sequence of `IFS' whitespace characters is also
|
|
treated as a delimiter. If the value of `IFS' is null, no word
|
|
splitting occurs.
|
|
|
|
Explicit null arguments (`""' or `''') are retained. Unquoted
|
|
implicit null arguments, resulting from the expansion of parameters
|
|
that have no values, are removed. If a parameter with no value is
|
|
expanded within double quotes, a null argument results and is retained.
|
|
|
|
Note that if no expansion occurs, no splitting is performed.
|
|
|
|
|
|
File: bashref.info, Node: Filename Expansion, Next: Quote Removal, Prev: Word Splitting, Up: Shell Expansions
|
|
|
|
3.5.8 Filename Expansion
|
|
------------------------
|
|
|
|
* Menu:
|
|
|
|
* Pattern Matching:: How the shell matches patterns.
|
|
|
|
After word splitting, unless the `-f' option has been set (*note The
|
|
Set Builtin::), Bash scans each word for the characters `*', `?', and
|
|
`['. If one of these characters appears, then the word is regarded as
|
|
a PATTERN, and replaced with an alphabetically sorted list of filenames
|
|
matching the pattern (*note Pattern Matching::). If no matching
|
|
filenames are found, and the shell option `nullglob' is disabled, the
|
|
word is left unchanged. If the `nullglob' option is set, and no
|
|
matches are found, the word is removed. If the `failglob' shell option
|
|
is set, and no matches are found, an error message is printed and the
|
|
command is not executed. If the shell option `nocaseglob' is enabled,
|
|
the match is performed without regard to the case of alphabetic
|
|
characters.
|
|
|
|
When a pattern is used for filename expansion, the character `.' at
|
|
the start of a filename or immediately following a slash must be
|
|
matched explicitly, unless the shell option `dotglob' is set. When
|
|
matching a filename, the slash character must always be matched
|
|
explicitly. In other cases, the `.' character is not treated specially.
|
|
|
|
See the description of `shopt' in *note The Shopt Builtin::, for a
|
|
description of the `nocaseglob', `nullglob', `failglob', and `dotglob'
|
|
options.
|
|
|
|
The `GLOBIGNORE' shell variable may be used to restrict the set of
|
|
filenames matching a pattern. If `GLOBIGNORE' is set, each matching
|
|
filename that also matches one of the patterns in `GLOBIGNORE' is
|
|
removed from the list of matches. The filenames `.' and `..' are
|
|
always ignored when `GLOBIGNORE' is set and not null. However, setting
|
|
`GLOBIGNORE' to a non-null value has the effect of enabling the
|
|
`dotglob' shell option, so all other filenames beginning with a `.'
|
|
will match. To get the old behavior of ignoring filenames beginning
|
|
with a `.', make `.*' one of the patterns in `GLOBIGNORE'. The
|
|
`dotglob' option is disabled when `GLOBIGNORE' is unset.
|
|
|
|
|
|
File: bashref.info, Node: Pattern Matching, Up: Filename Expansion
|
|
|
|
3.5.8.1 Pattern Matching
|
|
........................
|
|
|
|
Any character that appears in a pattern, other than the special pattern
|
|
characters described below, matches itself. The NUL character may not
|
|
occur in a pattern. A backslash escapes the following character; the
|
|
escaping backslash is discarded when matching. The special pattern
|
|
characters must be quoted if they are to be matched literally.
|
|
|
|
The special pattern characters have the following meanings:
|
|
`*'
|
|
Matches any string, including the null string. When the
|
|
`globstar' shell option is enabled, and `*' is used in a filename
|
|
expansion context, two adjacent `*'s used as a single pattern will
|
|
match all files and zero or more directories and subdirectories.
|
|
If followed by a `/', two adjacent `*'s will match only
|
|
directories and subdirectories.
|
|
|
|
`?'
|
|
Matches any single character.
|
|
|
|
`[...]'
|
|
Matches any one of the enclosed characters. A pair of characters
|
|
separated by a hyphen denotes a RANGE EXPRESSION; any character
|
|
that falls between those two characters, inclusive, using the
|
|
current locale's collating sequence and character set, is matched.
|
|
If the first character following the `[' is a `!' or a `^' then
|
|
any character not enclosed is matched. A `-' may be matched by
|
|
including it as the first or last character in the set. A `]' may
|
|
be matched by including it as the first character in the set. The
|
|
sorting order of characters in range expressions is determined by
|
|
the current locale and the values of the `LC_COLLATE' and `LC_ALL'
|
|
shell variables, if set.
|
|
|
|
For example, in the default C locale, `[a-dx-z]' is equivalent to
|
|
`[abcdxyz]'. Many locales sort characters in dictionary order,
|
|
and in these locales `[a-dx-z]' is typically not equivalent to
|
|
`[abcdxyz]'; it might be equivalent to `[aBbCcDdxXyYz]', for
|
|
example. To obtain the traditional interpretation of ranges in
|
|
bracket expressions, you can force the use of the C locale by
|
|
setting the `LC_COLLATE' or `LC_ALL' environment variable to the
|
|
value `C', or enable the `globasciiranges' shell option.
|
|
|
|
Within `[' and `]', CHARACTER CLASSES can be specified using the
|
|
syntax `[:'CLASS`:]', where CLASS is one of the following classes
|
|
defined in the POSIX standard:
|
|
alnum alpha ascii blank cntrl digit graph lower
|
|
print punct space upper word xdigit
|
|
A character class matches any character belonging to that class.
|
|
The `word' character class matches letters, digits, and the
|
|
character `_'.
|
|
|
|
Within `[' and `]', an EQUIVALENCE CLASS can be specified using
|
|
the syntax `[='C`=]', which matches all characters with the same
|
|
collation weight (as defined by the current locale) as the
|
|
character C.
|
|
|
|
Within `[' and `]', the syntax `[.'SYMBOL`.]' matches the
|
|
collating symbol SYMBOL.
|
|
|
|
If the `extglob' shell option is enabled using the `shopt' builtin,
|
|
several extended pattern matching operators are recognized. In the
|
|
following description, a PATTERN-LIST is a list of one or more patterns
|
|
separated by a `|'. Composite patterns may be formed using one or more
|
|
of the following sub-patterns:
|
|
|
|
`?(PATTERN-LIST)'
|
|
Matches zero or one occurrence of the given patterns.
|
|
|
|
`*(PATTERN-LIST)'
|
|
Matches zero or more occurrences of the given patterns.
|
|
|
|
`+(PATTERN-LIST)'
|
|
Matches one or more occurrences of the given patterns.
|
|
|
|
`@(PATTERN-LIST)'
|
|
Matches one of the given patterns.
|
|
|
|
`!(PATTERN-LIST)'
|
|
Matches anything except one of the given patterns.
|
|
|
|
|
|
File: bashref.info, Node: Quote Removal, Prev: Filename Expansion, Up: Shell Expansions
|
|
|
|
3.5.9 Quote Removal
|
|
-------------------
|
|
|
|
After the preceding expansions, all unquoted occurrences of the
|
|
characters `\', `'', and `"' that did not result from one of the above
|
|
expansions are removed.
|
|
|
|
|
|
File: bashref.info, Node: Redirections, Next: Executing Commands, Prev: Shell Expansions, Up: Basic Shell Features
|
|
|
|
3.6 Redirections
|
|
================
|
|
|
|
Before a command is executed, its input and output may be REDIRECTED
|
|
using a special notation interpreted by the shell. Redirection allows
|
|
commands' file handles to be duplicated, opened, closed, made to refer
|
|
to different files, and can change the files the command reads from and
|
|
writes to. Redirection may also be used to modify file handles in the
|
|
current shell execution environment. The following redirection
|
|
operators may precede or appear anywhere within a simple command or may
|
|
follow a command. Redirections are processed in the order they appear,
|
|
from left to right.
|
|
|
|
Each redirection that may be preceded by a file descriptor number
|
|
may instead be preceded by a word of the form {VARNAME}. In this case,
|
|
for each redirection operator except >&- and <&-, the shell will
|
|
allocate a file descriptor greater than 10 and assign it to {VARNAME}.
|
|
If >&- or <&- is preceded by {VARNAME}, the value of VARNAME defines
|
|
the file descriptor to close.
|
|
|
|
In the following descriptions, if the file descriptor number is
|
|
omitted, and the first character of the redirection operator is `<',
|
|
the redirection refers to the standard input (file descriptor 0). If
|
|
the first character of the redirection operator is `>', the redirection
|
|
refers to the standard output (file descriptor 1).
|
|
|
|
The word following the redirection operator in the following
|
|
descriptions, unless otherwise noted, is subjected to brace expansion,
|
|
tilde expansion, parameter expansion, command substitution, arithmetic
|
|
expansion, quote removal, filename expansion, and word splitting. If
|
|
it expands to more than one word, Bash reports an error.
|
|
|
|
Note that the order of redirections is significant. For example,
|
|
the command
|
|
ls > DIRLIST 2>&1
|
|
directs both standard output (file descriptor 1) and standard error
|
|
(file descriptor 2) to the file DIRLIST, while the command
|
|
ls 2>&1 > DIRLIST
|
|
directs only the standard output to file DIRLIST, because the
|
|
standard error was made a copy of the standard output before the
|
|
standard output was redirected to DIRLIST.
|
|
|
|
Bash handles several filenames specially when they are used in
|
|
redirections, as described in the following table:
|
|
|
|
`/dev/fd/FD'
|
|
If FD is a valid integer, file descriptor FD is duplicated.
|
|
|
|
`/dev/stdin'
|
|
File descriptor 0 is duplicated.
|
|
|
|
`/dev/stdout'
|
|
File descriptor 1 is duplicated.
|
|
|
|
`/dev/stderr'
|
|
File descriptor 2 is duplicated.
|
|
|
|
`/dev/tcp/HOST/PORT'
|
|
If HOST is a valid hostname or Internet address, and PORT is an
|
|
integer port number or service name, Bash attempts to open the
|
|
corresponding TCP socket.
|
|
|
|
`/dev/udp/HOST/PORT'
|
|
If HOST is a valid hostname or Internet address, and PORT is an
|
|
integer port number or service name, Bash attempts to open the
|
|
corresponding UDP socket.
|
|
|
|
A failure to open or create a file causes the redirection to fail.
|
|
|
|
Redirections using file descriptors greater than 9 should be used
|
|
with care, as they may conflict with file descriptors the shell uses
|
|
internally.
|
|
|
|
3.6.1 Redirecting Input
|
|
-----------------------
|
|
|
|
Redirection of input causes the file whose name results from the
|
|
expansion of WORD to be opened for reading on file descriptor `n', or
|
|
the standard input (file descriptor 0) if `n' is not specified.
|
|
|
|
The general format for redirecting input is:
|
|
[N]<WORD
|
|
|
|
3.6.2 Redirecting Output
|
|
------------------------
|
|
|
|
Redirection of output causes the file whose name results from the
|
|
expansion of WORD to be opened for writing on file descriptor N, or the
|
|
standard output (file descriptor 1) if N is not specified. If the file
|
|
does not exist it is created; if it does exist it is truncated to zero
|
|
size.
|
|
|
|
The general format for redirecting output is:
|
|
[N]>[|]WORD
|
|
|
|
If the redirection operator is `>', and the `noclobber' option to
|
|
the `set' builtin has been enabled, the redirection will fail if the
|
|
file whose name results from the expansion of WORD exists and is a
|
|
regular file. If the redirection operator is `>|', or the redirection
|
|
operator is `>' and the `noclobber' option is not enabled, the
|
|
redirection is attempted even if the file named by WORD exists.
|
|
|
|
3.6.3 Appending Redirected Output
|
|
---------------------------------
|
|
|
|
Redirection of output in this fashion causes the file whose name
|
|
results from the expansion of WORD to be opened for appending on file
|
|
descriptor N, or the standard output (file descriptor 1) if N is not
|
|
specified. If the file does not exist it is created.
|
|
|
|
The general format for appending output is:
|
|
[N]>>WORD
|
|
|
|
3.6.4 Redirecting Standard Output and Standard Error
|
|
----------------------------------------------------
|
|
|
|
This construct allows both the standard output (file descriptor 1) and
|
|
the standard error output (file descriptor 2) to be redirected to the
|
|
file whose name is the expansion of WORD.
|
|
|
|
There are two formats for redirecting standard output and standard
|
|
error:
|
|
&>WORD
|
|
and
|
|
>&WORD
|
|
Of the two forms, the first is preferred. This is semantically
|
|
equivalent to
|
|
>WORD 2>&1
|
|
When using the second form, WORD may not expand to a number or `-'.
|
|
If it does, other redirection operators apply (see Duplicating File
|
|
Descriptors below) for compatibility reasons.
|
|
|
|
3.6.5 Appending Standard Output and Standard Error
|
|
--------------------------------------------------
|
|
|
|
This construct allows both the standard output (file descriptor 1) and
|
|
the standard error output (file descriptor 2) to be appended to the
|
|
file whose name is the expansion of WORD.
|
|
|
|
The format for appending standard output and standard error is:
|
|
&>>WORD
|
|
This is semantically equivalent to
|
|
>>WORD 2>&1
|
|
(see Duplicating File Descriptors below).
|
|
|
|
3.6.6 Here Documents
|
|
--------------------
|
|
|
|
This type of redirection instructs the shell to read input from the
|
|
current source until a line containing only WORD (with no trailing
|
|
blanks) is seen. All of the lines read up to that point are then used
|
|
as the standard input for a command.
|
|
|
|
The format of here-documents is:
|
|
<<[-]WORD
|
|
HERE-DOCUMENT
|
|
DELIMITER
|
|
|
|
No parameter and variable expansion, command substitution,
|
|
arithmetic expansion, or filename expansion is performed on WORD. If
|
|
any characters in WORD are quoted, the DELIMITER is the result of quote
|
|
removal on WORD, and the lines in the here-document are not expanded.
|
|
If WORD is unquoted, all lines of the here-document are subjected to
|
|
parameter expansion, command substitution, and arithmetic expansion,
|
|
the character sequence `\newline' is ignored, and `\' must be used to
|
|
quote the characters `\', `$', and ``'.
|
|
|
|
If the redirection operator is `<<-', then all leading tab
|
|
characters are stripped from input lines and the line containing
|
|
DELIMITER. This allows here-documents within shell scripts to be
|
|
indented in a natural fashion.
|
|
|
|
3.6.7 Here Strings
|
|
------------------
|
|
|
|
A variant of here documents, the format is:
|
|
<<< WORD
|
|
|
|
The WORD undergoes brace expansion, tilde expansion, parameter and
|
|
variable expansion, command substitution, arithmetic expansion, and
|
|
quote removal. Pathname expansion and word splitting are not performed.
|
|
The result is supplied as a single string to the command on its
|
|
standard input.
|
|
|
|
3.6.8 Duplicating File Descriptors
|
|
----------------------------------
|
|
|
|
The redirection operator
|
|
[N]<&WORD
|
|
is used to duplicate input file descriptors. If WORD expands to one
|
|
or more digits, the file descriptor denoted by N is made to be a copy
|
|
of that file descriptor. If the digits in WORD do not specify a file
|
|
descriptor open for input, a redirection error occurs. If WORD
|
|
evaluates to `-', file descriptor N is closed. If N is not specified,
|
|
the standard input (file descriptor 0) is used.
|
|
|
|
The operator
|
|
[N]>&WORD
|
|
is used similarly to duplicate output file descriptors. If N is not
|
|
specified, the standard output (file descriptor 1) is used. If the
|
|
digits in WORD do not specify a file descriptor open for output, a
|
|
redirection error occurs. If WORD evaluates to `-', file descriptor N
|
|
is closed. As a special case, if N is omitted, and WORD does not
|
|
expand to one or more digits or `-', the standard output and standard
|
|
error are redirected as described previously.
|
|
|
|
3.6.9 Moving File Descriptors
|
|
-----------------------------
|
|
|
|
The redirection operator
|
|
[N]<&DIGIT-
|
|
moves the file descriptor DIGIT to file descriptor N, or the
|
|
standard input (file descriptor 0) if N is not specified. DIGIT is
|
|
closed after being duplicated to N.
|
|
|
|
Similarly, the redirection operator
|
|
[N]>&DIGIT-
|
|
moves the file descriptor DIGIT to file descriptor N, or the
|
|
standard output (file descriptor 1) if N is not specified.
|
|
|
|
3.6.10 Opening File Descriptors for Reading and Writing
|
|
-------------------------------------------------------
|
|
|
|
The redirection operator
|
|
[N]<>WORD
|
|
causes the file whose name is the expansion of WORD to be opened for
|
|
both reading and writing on file descriptor N, or on file descriptor 0
|
|
if N is not specified. If the file does not exist, it is created.
|
|
|
|
|
|
File: bashref.info, Node: Executing Commands, Next: Shell Scripts, Prev: Redirections, Up: Basic Shell Features
|
|
|
|
3.7 Executing Commands
|
|
======================
|
|
|
|
* Menu:
|
|
|
|
* Simple Command Expansion:: How Bash expands simple commands before
|
|
executing them.
|
|
* Command Search and Execution:: How Bash finds commands and runs them.
|
|
* Command Execution Environment:: The environment in which Bash
|
|
executes commands that are not
|
|
shell builtins.
|
|
* Environment:: The environment given to a command.
|
|
* Exit Status:: The status returned by commands and how Bash
|
|
interprets it.
|
|
* Signals:: What happens when Bash or a command it runs
|
|
receives a signal.
|
|
|
|
|
|
File: bashref.info, Node: Simple Command Expansion, Next: Command Search and Execution, Up: Executing Commands
|
|
|
|
3.7.1 Simple Command Expansion
|
|
------------------------------
|
|
|
|
When a simple command is executed, the shell performs the following
|
|
expansions, assignments, and redirections, from left to right.
|
|
|
|
1. The words that the parser has marked as variable assignments (those
|
|
preceding the command name) and redirections are saved for later
|
|
processing.
|
|
|
|
2. The words that are not variable assignments or redirections are
|
|
expanded (*note Shell Expansions::). If any words remain after
|
|
expansion, the first word is taken to be the name of the command
|
|
and the remaining words are the arguments.
|
|
|
|
3. Redirections are performed as described above (*note
|
|
Redirections::).
|
|
|
|
4. The text after the `=' in each variable assignment undergoes tilde
|
|
expansion, parameter expansion, command substitution, arithmetic
|
|
expansion, and quote removal before being assigned to the variable.
|
|
|
|
If no command name results, the variable assignments affect the
|
|
current shell environment. Otherwise, the variables are added to the
|
|
environment of the executed command and do not affect the current shell
|
|
environment. If any of the assignments attempts to assign a value to a
|
|
readonly variable, an error occurs, and the command exits with a
|
|
non-zero status.
|
|
|
|
If no command name results, redirections are performed, but do not
|
|
affect the current shell environment. A redirection error causes the
|
|
command to exit with a non-zero status.
|
|
|
|
If there is a command name left after expansion, execution proceeds
|
|
as described below. Otherwise, the command exits. If one of the
|
|
expansions contained a command substitution, the exit status of the
|
|
command is the exit status of the last command substitution performed.
|
|
If there were no command substitutions, the command exits with a status
|
|
of zero.
|
|
|
|
|
|
File: bashref.info, Node: Command Search and Execution, Next: Command Execution Environment, Prev: Simple Command Expansion, Up: Executing Commands
|
|
|
|
3.7.2 Command Search and Execution
|
|
----------------------------------
|
|
|
|
After a command has been split into words, if it results in a simple
|
|
command and an optional list of arguments, the following actions are
|
|
taken.
|
|
|
|
1. If the command name contains no slashes, the shell attempts to
|
|
locate it. If there exists a shell function by that name, that
|
|
function is invoked as described in *note Shell Functions::.
|
|
|
|
2. If the name does not match a function, the shell searches for it
|
|
in the list of shell builtins. If a match is found, that builtin
|
|
is invoked.
|
|
|
|
3. If the name is neither a shell function nor a builtin, and
|
|
contains no slashes, Bash searches each element of `$PATH' for a
|
|
directory containing an executable file by that name. Bash uses a
|
|
hash table to remember the full pathnames of executable files to
|
|
avoid multiple `PATH' searches (see the description of `hash' in
|
|
*note Bourne Shell Builtins::). A full search of the directories
|
|
in `$PATH' is performed only if the command is not found in the
|
|
hash table. If the search is unsuccessful, the shell searches for
|
|
a defined shell function named `command_not_found_handle'. If
|
|
that function exists, it is invoked with the original command and
|
|
the original command's arguments as its arguments, and the
|
|
function's exit status becomes the exit status of the shell. If
|
|
that function is not defined, the shell prints an error message
|
|
and returns an exit status of 127.
|
|
|
|
4. If the search is successful, or if the command name contains one
|
|
or more slashes, the shell executes the named program in a
|
|
separate execution environment. Argument 0 is set to the name
|
|
given, and the remaining arguments to the command are set to the
|
|
arguments supplied, if any.
|
|
|
|
5. If this execution fails because the file is not in executable
|
|
format, and the file is not a directory, it is assumed to be a
|
|
SHELL SCRIPT and the shell executes it as described in *note Shell
|
|
Scripts::.
|
|
|
|
6. If the command was not begun asynchronously, the shell waits for
|
|
the command to complete and collects its exit status.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Command Execution Environment, Next: Environment, Prev: Command Search and Execution, Up: Executing Commands
|
|
|
|
3.7.3 Command Execution Environment
|
|
-----------------------------------
|
|
|
|
The shell has an EXECUTION ENVIRONMENT, which consists of the following:
|
|
|
|
* open files inherited by the shell at invocation, as modified by
|
|
redirections supplied to the `exec' builtin
|
|
|
|
* the current working directory as set by `cd', `pushd', or `popd',
|
|
or inherited by the shell at invocation
|
|
|
|
* the file creation mode mask as set by `umask' or inherited from
|
|
the shell's parent
|
|
|
|
* current traps set by `trap'
|
|
|
|
* shell parameters that are set by variable assignment or with `set'
|
|
or inherited from the shell's parent in the environment
|
|
|
|
* shell functions defined during execution or inherited from the
|
|
shell's parent in the environment
|
|
|
|
* options enabled at invocation (either by default or with
|
|
command-line arguments) or by `set'
|
|
|
|
* options enabled by `shopt' (*note The Shopt Builtin::)
|
|
|
|
* shell aliases defined with `alias' (*note Aliases::)
|
|
|
|
* various process IDs, including those of background jobs (*note
|
|
Lists::), the value of `$$', and the value of `$PPID'
|
|
|
|
|
|
When a simple command other than a builtin or shell function is to
|
|
be executed, it is invoked in a separate execution environment that
|
|
consists of the following. Unless otherwise noted, the values are
|
|
inherited from the shell.
|
|
|
|
* the shell's open files, plus any modifications and additions
|
|
specified by redirections to the command
|
|
|
|
* the current working directory
|
|
|
|
* the file creation mode mask
|
|
|
|
* shell variables and functions marked for export, along with
|
|
variables exported for the command, passed in the environment
|
|
(*note Environment::)
|
|
|
|
* traps caught by the shell are reset to the values inherited from
|
|
the shell's parent, and traps ignored by the shell are ignored
|
|
|
|
|
|
A command invoked in this separate environment cannot affect the
|
|
shell's execution environment.
|
|
|
|
Command substitution, commands grouped with parentheses, and
|
|
asynchronous commands are invoked in a subshell environment that is a
|
|
duplicate of the shell environment, except that traps caught by the
|
|
shell are reset to the values that the shell inherited from its parent
|
|
at invocation. Builtin commands that are invoked as part of a pipeline
|
|
are also executed in a subshell environment. Changes made to the
|
|
subshell environment cannot affect the shell's execution environment.
|
|
|
|
Subshells spawned to execute command substitutions inherit the value
|
|
of the `-e' option from the parent shell. When not in POSIX mode, Bash
|
|
clears the `-e' option in such subshells.
|
|
|
|
If a command is followed by a `&' and job control is not active, the
|
|
default standard input for the command is the empty file `/dev/null'.
|
|
Otherwise, the invoked command inherits the file descriptors of the
|
|
calling shell as modified by redirections.
|
|
|
|
|
|
File: bashref.info, Node: Environment, Next: Exit Status, Prev: Command Execution Environment, Up: Executing Commands
|
|
|
|
3.7.4 Environment
|
|
-----------------
|
|
|
|
When a program is invoked it is given an array of strings called the
|
|
ENVIRONMENT. This is a list of name-value pairs, of the form
|
|
`name=value'.
|
|
|
|
Bash provides several ways to manipulate the environment. On
|
|
invocation, the shell scans its own environment and creates a parameter
|
|
for each name found, automatically marking it for EXPORT to child
|
|
processes. Executed commands inherit the environment. The `export'
|
|
and `declare -x' commands allow parameters and functions to be added to
|
|
and deleted from the environment. If the value of a parameter in the
|
|
environment is modified, the new value becomes part of the environment,
|
|
replacing the old. The environment inherited by any executed command
|
|
consists of the shell's initial environment, whose values may be
|
|
modified in the shell, less any pairs removed by the `unset' and
|
|
`export -n' commands, plus any additions via the `export' and `declare
|
|
-x' commands.
|
|
|
|
The environment for any simple command or function may be augmented
|
|
temporarily by prefixing it with parameter assignments, as described in
|
|
*note Shell Parameters::. These assignment statements affect only the
|
|
environment seen by that command.
|
|
|
|
If the `-k' option is set (*note The Set Builtin::), then all
|
|
parameter assignments are placed in the environment for a command, not
|
|
just those that precede the command name.
|
|
|
|
When Bash invokes an external command, the variable `$_' is set to
|
|
the full pathname of the command and passed to that command in its
|
|
environment.
|
|
|
|
|
|
File: bashref.info, Node: Exit Status, Next: Signals, Prev: Environment, Up: Executing Commands
|
|
|
|
3.7.5 Exit Status
|
|
-----------------
|
|
|
|
The exit status of an executed command is the value returned by the
|
|
WAITPID system call or equivalent function. Exit statuses fall between
|
|
0 and 255, though, as explained below, the shell may use values above
|
|
125 specially. Exit statuses from shell builtins and compound commands
|
|
are also limited to this range. Under certain circumstances, the shell
|
|
will use special values to indicate specific failure modes.
|
|
|
|
For the shell's purposes, a command which exits with a zero exit
|
|
status has succeeded. A non-zero exit status indicates failure. This
|
|
seemingly counter-intuitive scheme is used so there is one well-defined
|
|
way to indicate success and a variety of ways to indicate various
|
|
failure modes. When a command terminates on a fatal signal whose
|
|
number is N, Bash uses the value 128+N as the exit status.
|
|
|
|
If a command is not found, the child process created to execute it
|
|
returns a status of 127. If a command is found but is not executable,
|
|
the return status is 126.
|
|
|
|
If a command fails because of an error during expansion or
|
|
redirection, the exit status is greater than zero.
|
|
|
|
The exit status is used by the Bash conditional commands (*note
|
|
Conditional Constructs::) and some of the list constructs (*note
|
|
Lists::).
|
|
|
|
All of the Bash builtins return an exit status of zero if they
|
|
succeed and a non-zero status on failure, so they may be used by the
|
|
conditional and list constructs. All builtins return an exit status of
|
|
2 to indicate incorrect usage.
|
|
|
|
|
|
File: bashref.info, Node: Signals, Prev: Exit Status, Up: Executing Commands
|
|
|
|
3.7.6 Signals
|
|
-------------
|
|
|
|
When Bash is interactive, in the absence of any traps, it ignores
|
|
`SIGTERM' (so that `kill 0' does not kill an interactive shell), and
|
|
`SIGINT' is caught and handled (so that the `wait' builtin is
|
|
interruptible). When Bash receives a `SIGINT', it breaks out of any
|
|
executing loops. In all cases, Bash ignores `SIGQUIT'. If job control
|
|
is in effect (*note Job Control::), Bash ignores `SIGTTIN', `SIGTTOU',
|
|
and `SIGTSTP'.
|
|
|
|
Non-builtin commands started by Bash have signal handlers set to the
|
|
values inherited by the shell from its parent. When job control is not
|
|
in effect, asynchronous commands ignore `SIGINT' and `SIGQUIT' in
|
|
addition to these inherited handlers. Commands run as a result of
|
|
command substitution ignore the keyboard-generated job control signals
|
|
`SIGTTIN', `SIGTTOU', and `SIGTSTP'.
|
|
|
|
The shell exits by default upon receipt of a `SIGHUP'. Before
|
|
exiting, an interactive shell resends the `SIGHUP' to all jobs, running
|
|
or stopped. Stopped jobs are sent `SIGCONT' to ensure that they receive
|
|
the `SIGHUP'. To prevent the shell from sending the `SIGHUP' signal to
|
|
a particular job, it should be removed from the jobs table with the
|
|
`disown' builtin (*note Job Control Builtins::) or marked to not
|
|
receive `SIGHUP' using `disown -h'.
|
|
|
|
If the `huponexit' shell option has been set with `shopt' (*note
|
|
The Shopt Builtin::), Bash sends a `SIGHUP' to all jobs when an
|
|
interactive login shell exits.
|
|
|
|
If Bash is waiting for a command to complete and receives a signal
|
|
for which a trap has been set, the trap will not be executed until the
|
|
command completes. When Bash is waiting for an asynchronous command
|
|
via the `wait' builtin, the reception of a signal for which a trap has
|
|
been set will cause the `wait' builtin to return immediately with an
|
|
exit status greater than 128, immediately after which the trap is
|
|
executed.
|
|
|
|
|
|
File: bashref.info, Node: Shell Scripts, Prev: Executing Commands, Up: Basic Shell Features
|
|
|
|
3.8 Shell Scripts
|
|
=================
|
|
|
|
A shell script is a text file containing shell commands. When such a
|
|
file is used as the first non-option argument when invoking Bash, and
|
|
neither the `-c' nor `-s' option is supplied (*note Invoking Bash::),
|
|
Bash reads and executes commands from the file, then exits. This mode
|
|
of operation creates a non-interactive shell. The shell first searches
|
|
for the file in the current directory, and looks in the directories in
|
|
`$PATH' if not found there.
|
|
|
|
When Bash runs a shell script, it sets the special parameter `0' to
|
|
the name of the file, rather than the name of the shell, and the
|
|
positional parameters are set to the remaining arguments, if any are
|
|
given. If no additional arguments are supplied, the positional
|
|
parameters are unset.
|
|
|
|
A shell script may be made executable by using the `chmod' command
|
|
to turn on the execute bit. When Bash finds such a file while
|
|
searching the `$PATH' for a command, it spawns a subshell to execute
|
|
it. In other words, executing
|
|
filename ARGUMENTS
|
|
is equivalent to executing
|
|
bash filename ARGUMENTS
|
|
|
|
if `filename' is an executable shell script. This subshell
|
|
reinitializes itself, so that the effect is as if a new shell had been
|
|
invoked to interpret the script, with the exception that the locations
|
|
of commands remembered by the parent (see the description of `hash' in
|
|
*note Bourne Shell Builtins::) are retained by the child.
|
|
|
|
Most versions of Unix make this a part of the operating system's
|
|
command execution mechanism. If the first line of a script begins with
|
|
the two characters `#!', the remainder of the line specifies an
|
|
interpreter for the program. Thus, you can specify Bash, `awk', Perl,
|
|
or some other interpreter and write the rest of the script file in that
|
|
language.
|
|
|
|
The arguments to the interpreter consist of a single optional
|
|
argument following the interpreter name on the first line of the script
|
|
file, followed by the name of the script file, followed by the rest of
|
|
the arguments. Bash will perform this action on operating systems that
|
|
do not handle it themselves. Note that some older versions of Unix
|
|
limit the interpreter name and argument to a maximum of 32 characters.
|
|
|
|
Bash scripts often begin with `#! /bin/bash' (assuming that Bash has
|
|
been installed in `/bin'), since this ensures that Bash will be used to
|
|
interpret the script, even if it is executed under another shell.
|
|
|
|
|
|
File: bashref.info, Node: Shell Builtin Commands, Next: Shell Variables, Prev: Basic Shell Features, Up: Top
|
|
|
|
4 Shell Builtin Commands
|
|
************************
|
|
|
|
* Menu:
|
|
|
|
* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
|
|
Shell.
|
|
* Bash Builtins:: Table of builtins specific to Bash.
|
|
* Modifying Shell Behavior:: Builtins to modify shell attributes and
|
|
optional behavior.
|
|
* Special Builtins:: Builtin commands classified specially by
|
|
POSIX.
|
|
|
|
Builtin commands are contained within the shell itself. When the
|
|
name of a builtin command is used as the first word of a simple command
|
|
(*note Simple Commands::), the shell executes the command directly,
|
|
without invoking another program. Builtin commands are necessary to
|
|
implement functionality impossible or inconvenient to obtain with
|
|
separate utilities.
|
|
|
|
This section briefly describes the builtins which Bash inherits from
|
|
the Bourne Shell, as well as the builtin commands which are unique to
|
|
or have been extended in Bash.
|
|
|
|
Several builtin commands are described in other chapters: builtin
|
|
commands which provide the Bash interface to the job control facilities
|
|
(*note Job Control Builtins::), the directory stack (*note Directory
|
|
Stack Builtins::), the command history (*note Bash History Builtins::),
|
|
and the programmable completion facilities (*note Programmable
|
|
Completion Builtins::).
|
|
|
|
Many of the builtins have been extended by POSIX or Bash.
|
|
|
|
Unless otherwise noted, each builtin command documented as accepting
|
|
options preceded by `-' accepts `--' to signify the end of the options.
|
|
The `:', `true', `false', and `test' builtins do not accept options and
|
|
do not treat `--' specially. The `exit', `logout', `break',
|
|
`continue', `let', and `shift' builtins accept and process arguments
|
|
beginning with `-' without requiring `--'. Other builtins that accept
|
|
arguments but are not specified as accepting options interpret
|
|
arguments beginning with `-' as invalid options and require `--' to
|
|
prevent this interpretation.
|
|
|
|
|
|
File: bashref.info, Node: Bourne Shell Builtins, Next: Bash Builtins, Up: Shell Builtin Commands
|
|
|
|
4.1 Bourne Shell Builtins
|
|
=========================
|
|
|
|
The following shell builtin commands are inherited from the Bourne
|
|
Shell. These commands are implemented as specified by the POSIX
|
|
standard.
|
|
|
|
`: (a colon)'
|
|
: [ARGUMENTS]
|
|
|
|
Do nothing beyond expanding ARGUMENTS and performing redirections.
|
|
The return status is zero.
|
|
|
|
`. (a period)'
|
|
. FILENAME [ARGUMENTS]
|
|
|
|
Read and execute commands from the FILENAME argument in the
|
|
current shell context. If FILENAME does not contain a slash, the
|
|
`PATH' variable is used to find FILENAME. When Bash is not in
|
|
POSIX mode, the current directory is searched if FILENAME is not
|
|
found in `$PATH'. If any ARGUMENTS are supplied, they become the
|
|
positional parameters when FILENAME is executed. Otherwise the
|
|
positional parameters are unchanged. The return status is the
|
|
exit status of the last command executed, or zero if no commands
|
|
are executed. If FILENAME is not found, or cannot be read, the
|
|
return status is non-zero. This builtin is equivalent to `source'.
|
|
|
|
`break'
|
|
break [N]
|
|
|
|
Exit from a `for', `while', `until', or `select' loop. If N is
|
|
supplied, the Nth enclosing loop is exited. N must be greater
|
|
than or equal to 1. The return status is zero unless N is not
|
|
greater than or equal to 1.
|
|
|
|
`cd'
|
|
cd [-L|[-P [-e]]] [DIRECTORY]
|
|
|
|
Change the current working directory to DIRECTORY. If DIRECTORY
|
|
is not supplied, the value of the `HOME' shell variable is used.
|
|
Any additional arguments following DIRECTORY are ignored. If the
|
|
shell variable `CDPATH' exists, it is used as a search path: each
|
|
directory name in `CDPATH' is searched for DIRECTORY, with
|
|
alternative directory names in `CDPATH' separated by a colon (`:').
|
|
If DIRECTORY begins with a slash, `CDPATH' is not used.
|
|
|
|
The `-P' option means to not follow symbolic links: symbolic links
|
|
are resolved while `cd' is traversing DIRECTORY and before
|
|
processing an instance of `..' in DIRECTORY.
|
|
|
|
By default, or when the `-L' option is supplied, symbolic links in
|
|
DIRECTORY are resolved after `cd' processes an instance of `..' in
|
|
DIRECTORY.
|
|
|
|
If `..' appears in DIRECTORY, it is processed by removing the
|
|
immediately preceding pathname component, back to a slash or the
|
|
beginning of DIRECTORY.
|
|
|
|
If the `-e' option is supplied with `-P' and the current working
|
|
directory cannot be successfully determined after a successful
|
|
directory change, `cd' will return an unsuccessful status. If
|
|
DIRECTORY is `-', it is converted to `$OLDPWD' before the
|
|
directory change is attempted.
|
|
|
|
If a non-empty directory name from `CDPATH' is used, or if `-' is
|
|
the first argument, and the directory change is successful, the
|
|
absolute pathname of the new working directory is written to the
|
|
standard output.
|
|
|
|
The return status is zero if the directory is successfully changed,
|
|
non-zero otherwise.
|
|
|
|
`continue'
|
|
continue [N]
|
|
|
|
Resume the next iteration of an enclosing `for', `while', `until',
|
|
or `select' loop. If N is supplied, the execution of the Nth
|
|
enclosing loop is resumed. N must be greater than or equal to 1.
|
|
The return status is zero unless N is not greater than or equal to
|
|
1.
|
|
|
|
`eval'
|
|
eval [ARGUMENTS]
|
|
|
|
The arguments are concatenated together into a single command,
|
|
which is then read and executed, and its exit status returned as
|
|
the exit status of `eval'. If there are no arguments or only
|
|
empty arguments, the return status is zero.
|
|
|
|
`exec'
|
|
exec [-cl] [-a NAME] [COMMAND [ARGUMENTS]]
|
|
|
|
If COMMAND is supplied, it replaces the shell without creating a
|
|
new process. If the `-l' option is supplied, the shell places a
|
|
dash at the beginning of the zeroth argument passed to COMMAND.
|
|
This is what the `login' program does. The `-c' option causes
|
|
COMMAND to be executed with an empty environment. If `-a' is
|
|
supplied, the shell passes NAME as the zeroth argument to COMMAND.
|
|
If COMMAND cannot be executed for some reason, a non-interactive
|
|
shell exits, unless the `execfail' shell option is enabled. In
|
|
that case, it returns failure. An interactive shell returns
|
|
failure if the file cannot be executed. If no COMMAND is
|
|
specified, redirections may be used to affect the current shell
|
|
environment. If there are no redirection errors, the return
|
|
status is zero; otherwise the return status is non-zero.
|
|
|
|
`exit'
|
|
exit [N]
|
|
|
|
Exit the shell, returning a status of N to the shell's parent. If
|
|
N is omitted, the exit status is that of the last command executed.
|
|
Any trap on `EXIT' is executed before the shell terminates.
|
|
|
|
`export'
|
|
export [-fn] [-p] [NAME[=VALUE]]
|
|
|
|
Mark each NAME to be passed to child processes in the environment.
|
|
If the `-f' option is supplied, the NAMEs refer to shell
|
|
functions; otherwise the names refer to shell variables. The `-n'
|
|
option means to no longer mark each NAME for export. If no NAMES
|
|
are supplied, or if the `-p' option is given, a list of names of
|
|
all exported variables is displayed. The `-p' option displays
|
|
output in a form that may be reused as input. If a variable name
|
|
is followed by =VALUE, the value of the variable is set to VALUE.
|
|
|
|
The return status is zero unless an invalid option is supplied,
|
|
one of the names is not a valid shell variable name, or `-f' is
|
|
supplied with a name that is not a shell function.
|
|
|
|
`getopts'
|
|
getopts OPTSTRING NAME [ARGS]
|
|
|
|
`getopts' is used by shell scripts to parse positional parameters.
|
|
OPTSTRING contains the option characters to be recognized; if a
|
|
character is followed by a colon, the option is expected to have an
|
|
argument, which should be separated from it by whitespace. The
|
|
colon (`:') and question mark (`?') may not be used as option
|
|
characters. Each time it is invoked, `getopts' places the next
|
|
option in the shell variable NAME, initializing NAME if it does
|
|
not exist, and the index of the next argument to be processed into
|
|
the variable `OPTIND'. `OPTIND' is initialized to 1 each time the
|
|
shell or a shell script is invoked. When an option requires an
|
|
argument, `getopts' places that argument into the variable
|
|
`OPTARG'. The shell does not reset `OPTIND' automatically; it
|
|
must be manually reset between multiple calls to `getopts' within
|
|
the same shell invocation if a new set of parameters is to be used.
|
|
|
|
When the end of options is encountered, `getopts' exits with a
|
|
return value greater than zero. `OPTIND' is set to the index of
|
|
the first non-option argument, and NAME is set to `?'.
|
|
|
|
`getopts' normally parses the positional parameters, but if more
|
|
arguments are given in ARGS, `getopts' parses those instead.
|
|
|
|
`getopts' can report errors in two ways. If the first character of
|
|
OPTSTRING is a colon, SILENT error reporting is used. In normal
|
|
operation, diagnostic messages are printed when invalid options or
|
|
missing option arguments are encountered. If the variable `OPTERR'
|
|
is set to 0, no error messages will be displayed, even if the first
|
|
character of `optstring' is not a colon.
|
|
|
|
If an invalid option is seen, `getopts' places `?' into NAME and,
|
|
if not silent, prints an error message and unsets `OPTARG'. If
|
|
`getopts' is silent, the option character found is placed in
|
|
`OPTARG' and no diagnostic message is printed.
|
|
|
|
If a required argument is not found, and `getopts' is not silent,
|
|
a question mark (`?') is placed in NAME, `OPTARG' is unset, and a
|
|
diagnostic message is printed. If `getopts' is silent, then a
|
|
colon (`:') is placed in NAME and `OPTARG' is set to the option
|
|
character found.
|
|
|
|
`hash'
|
|
hash [-r] [-p FILENAME] [-dt] [NAME]
|
|
|
|
Each time `hash' is invoked, it remembers the full pathnames of the
|
|
commands specified as NAME arguments, so they need not be searched
|
|
for on subsequent invocations. The commands are found by
|
|
searching through the directories listed in `$PATH'. Any
|
|
previously-remembered pathname is discarded. The `-p' option
|
|
inhibits the path search, and FILENAME is used as the location of
|
|
NAME. The `-r' option causes the shell to forget all remembered
|
|
locations. The `-d' option causes the shell to forget the
|
|
remembered location of each NAME. If the `-t' option is supplied,
|
|
the full pathname to which each NAME corresponds is printed. If
|
|
multiple NAME arguments are supplied with `-t' the NAME is printed
|
|
before the hashed full pathname. The `-l' option causes output to
|
|
be displayed in a format that may be reused as input. If no
|
|
arguments are given, or if only `-l' is supplied, information
|
|
about remembered commands is printed. The return status is zero
|
|
unless a NAME is not found or an invalid option is supplied.
|
|
|
|
`pwd'
|
|
pwd [-LP]
|
|
|
|
Print the absolute pathname of the current working directory. If
|
|
the `-P' option is supplied, the pathname printed will not contain
|
|
symbolic links. If the `-L' option is supplied, the pathname
|
|
printed may contain symbolic links. The return status is zero
|
|
unless an error is encountered while determining the name of the
|
|
current directory or an invalid option is supplied.
|
|
|
|
`readonly'
|
|
readonly [-aAf] [-p] [NAME[=VALUE]] ...
|
|
|
|
Mark each NAME as readonly. The values of these names may not be
|
|
changed by subsequent assignment. If the `-f' option is supplied,
|
|
each NAME refers to a shell function. The `-a' option means each
|
|
NAME refers to an indexed array variable; the `-A' option means
|
|
each NAME refers to an associative array variable. If both
|
|
options are supplied, `-A' takes precedence. If no NAME arguments
|
|
are given, or if the `-p' option is supplied, a list of all
|
|
readonly names is printed. The other options may be used to
|
|
restrict the output to a subset of the set of readonly names. The
|
|
`-p' option causes output to be displayed in a format that may be
|
|
reused as input. If a variable name is followed by =VALUE, the
|
|
value of the variable is set to VALUE. The return status is zero
|
|
unless an invalid option is supplied, one of the NAME arguments is
|
|
not a valid shell variable or function name, or the `-f' option is
|
|
supplied with a name that is not a shell function.
|
|
|
|
`return'
|
|
return [N]
|
|
|
|
Cause a shell function to stop executing and return the value N to
|
|
its caller. If N is not supplied, the return value is the exit
|
|
status of the last command executed in the function. `return' may
|
|
also be used to terminate execution of a script being executed
|
|
with the `.' (`source') builtin, returning either N or the exit
|
|
status of the last command executed within the script as the exit
|
|
status of the script. If N is supplied, the return value is its
|
|
least significant 8 bits. Any command associated with the
|
|
`RETURN' trap is executed before execution resumes after the
|
|
function or script. The return status is non-zero if `return' is
|
|
supplied a non-numeric argument or is used outside a function and
|
|
not during the execution of a script by `.' or `source'.
|
|
|
|
`shift'
|
|
shift [N]
|
|
|
|
Shift the positional parameters to the left by N. The positional
|
|
parameters from N+1 ... `$#' are renamed to `$1' ... `$#'-N.
|
|
Parameters represented by the numbers `$#' to `$#'-N+1 are unset.
|
|
N must be a non-negative number less than or equal to `$#'. If N
|
|
is zero or greater than `$#', the positional parameters are not
|
|
changed. If N is not supplied, it is assumed to be 1. The return
|
|
status is zero unless N is greater than `$#' or less than zero,
|
|
non-zero otherwise.
|
|
|
|
`test'
|
|
`['
|
|
test EXPR
|
|
|
|
Evaluate a conditional express ion EXPR and return a status of 0
|
|
(true) or 1 (false). Each operator and operand must be a separate
|
|
argument. Expressions are composed of the primaries described
|
|
below in *note Bash Conditional Expressions::. `test' does not
|
|
accept any options, nor does it accept and ignore an argument of
|
|
`--' as signifying the end of options.
|
|
|
|
When the `[' form is used, the last argument to the command must
|
|
be a `]'.
|
|
|
|
Expressions may be combined using the following operators, listed
|
|
in decreasing order of precedence. The evaluation depends on the
|
|
number of arguments; see below. Operator precedence is used when
|
|
there are five or more arguments.
|
|
|
|
`! EXPR'
|
|
True if EXPR is false.
|
|
|
|
`( EXPR )'
|
|
Returns the value of EXPR. This may be used to override the
|
|
normal precedence of operators.
|
|
|
|
`EXPR1 -a EXPR2'
|
|
True if both EXPR1 and EXPR2 are true.
|
|
|
|
`EXPR1 -o EXPR2'
|
|
True if either EXPR1 or EXPR2 is true.
|
|
|
|
The `test' and `[' builtins evaluate conditional expressions using
|
|
a set of rules based on the number of arguments.
|
|
|
|
0 arguments
|
|
The expression is false.
|
|
|
|
1 argument
|
|
The expression is true if and only if the argument is not
|
|
null.
|
|
|
|
2 arguments
|
|
If the first argument is `!', the expression is true if and
|
|
only if the second argument is null. If the first argument
|
|
is one of the unary conditional operators (*note Bash
|
|
Conditional Expressions::), the expression is true if the
|
|
unary test is true. If the first argument is not a valid
|
|
unary operator, the expression is false.
|
|
|
|
3 arguments
|
|
The following conditions are applied in the order listed. If
|
|
the second argument is one of the binary conditional
|
|
operators (*note Bash Conditional Expressions::), the result
|
|
of the expression is the result of the binary test using the
|
|
first and third arguments as operands. The `-a' and `-o'
|
|
operators are considered binary operators when there are
|
|
three arguments. If the first argument is `!', the value is
|
|
the negation of the two-argument test using the second and
|
|
third arguments. If the first argument is exactly `(' and
|
|
the third argument is exactly `)', the result is the
|
|
one-argument test of the second argument. Otherwise, the
|
|
expression is false.
|
|
|
|
4 arguments
|
|
If the first argument is `!', the result is the negation of
|
|
the three-argument expression composed of the remaining
|
|
arguments. Otherwise, the expression is parsed and evaluated
|
|
according to precedence using the rules listed above.
|
|
|
|
5 or more arguments
|
|
The expression is parsed and evaluated according to precedence
|
|
using the rules listed above.
|
|
|
|
When used with `test' or `[', the `<' and `>' operators sort
|
|
lexicographically using ASCII ordering.
|
|
|
|
`times'
|
|
times
|
|
|
|
Print out the user and system times used by the shell and its
|
|
children. The return status is zero.
|
|
|
|
`trap'
|
|
trap [-lp] [ARG] [SIGSPEC ...]
|
|
|
|
The commands in ARG are to be read and executed when the shell
|
|
receives signal SIGSPEC. If ARG is absent (and there is a single
|
|
SIGSPEC) or equal to `-', each specified signal's disposition is
|
|
reset to the value it had when the shell was started. If ARG is
|
|
the null string, then the signal specified by each SIGSPEC is
|
|
ignored by the shell and commands it invokes. If ARG is not
|
|
present and `-p' has been supplied, the shell displays the trap
|
|
commands associated with each SIGSPEC. If no arguments are
|
|
supplied, or only `-p' is given, `trap' prints the list of commands
|
|
associated with each signal number in a form that may be reused as
|
|
shell input. The `-l' option causes the shell to print a list of
|
|
signal names and their corresponding numbers. Each SIGSPEC is
|
|
either a signal name or a signal number. Signal names are case
|
|
insensitive and the `SIG' prefix is optional.
|
|
|
|
If a SIGSPEC is `0' or `EXIT', ARG is executed when the shell
|
|
exits. If a SIGSPEC is `DEBUG', the command ARG is executed
|
|
before every simple command, `for' command, `case' command,
|
|
`select' command, every arithmetic `for' command, and before the
|
|
first command executes in a shell function. Refer to the
|
|
description of the `extdebug' option to the `shopt' builtin (*note
|
|
The Shopt Builtin::) for details of its effect on the `DEBUG' trap.
|
|
If a SIGSPEC is `RETURN', the command ARG is executed each time a
|
|
shell function or a script executed with the `.' or `source'
|
|
builtins finishes executing.
|
|
|
|
If a SIGSPEC is `ERR', the command ARG is executed whenever a
|
|
pipeline (which may consist of a single simple command), a list,
|
|
or a compound command returns a non-zero exit status, subject to
|
|
the following conditions. The `ERR' trap is not executed if the
|
|
failed command is part of the command list immediately following
|
|
an `until' or `while' keyword, part of the test following the `if'
|
|
or `elif' reserved words, part of a command executed in a `&&' or
|
|
`||' list except the command following the final `&&' or `||', any
|
|
command in a pipeline but the last, or if the command's return
|
|
status is being inverted using `!'. These are the same conditions
|
|
obeyed by the `errexit' (`-e') option.
|
|
|
|
Signals ignored upon entry to the shell cannot be trapped or reset.
|
|
Trapped signals that are not being ignored are reset to their
|
|
original values in a subshell or subshell environment when one is
|
|
created.
|
|
|
|
The return status is zero unless a SIGSPEC does not specify a
|
|
valid signal.
|
|
|
|
`umask'
|
|
umask [-p] [-S] [MODE]
|
|
|
|
Set the shell process's file creation mask to MODE. If MODE
|
|
begins with a digit, it is interpreted as an octal number; if not,
|
|
it is interpreted as a symbolic mode mask similar to that accepted
|
|
by the `chmod' command. If MODE is omitted, the current value of
|
|
the mask is printed. If the `-S' option is supplied without a
|
|
MODE argument, the mask is printed in a symbolic format. If the
|
|
`-p' option is supplied, and MODE is omitted, the output is in a
|
|
form that may be reused as input. The return status is zero if
|
|
the mode is successfully changed or if no MODE argument is
|
|
supplied, and non-zero otherwise.
|
|
|
|
Note that when the mode is interpreted as an octal number, each
|
|
number of the umask is subtracted from `7'. Thus, a umask of `022'
|
|
results in permissions of `755'.
|
|
|
|
`unset'
|
|
unset [-fnv] [NAME]
|
|
|
|
Remove each variable or function NAME. If the `-v' option is
|
|
given, each NAME refers to a shell variable and that variable is
|
|
remvoved. If the `-f' option is given, the NAMEs refer to shell
|
|
functions, and the function definition is removed. If the `-n'
|
|
option is supplied, and NAME is a variable with the NAMEREF
|
|
attribute, NAME will be unset rather than the variable it
|
|
references. `-n' has no effect if the `-f' option is supplied.
|
|
If no options are supplied, each NAME refers to a variable; if
|
|
there is no variable by that name, any function with that name is
|
|
unset. Readonly variables and functions may not be unset. The
|
|
return status is zero unless a NAME is readonly.
|
|
|
|
|
|
File: bashref.info, Node: Bash Builtins, Next: Modifying Shell Behavior, Prev: Bourne Shell Builtins, Up: Shell Builtin Commands
|
|
|
|
4.2 Bash Builtin Commands
|
|
=========================
|
|
|
|
This section describes builtin commands which are unique to or have
|
|
been extended in Bash. Some of these commands are specified in the
|
|
POSIX standard.
|
|
|
|
`alias'
|
|
alias [-p] [NAME[=VALUE] ...]
|
|
|
|
Without arguments or with the `-p' option, `alias' prints the list
|
|
of aliases on the standard output in a form that allows them to be
|
|
reused as input. If arguments are supplied, an alias is defined
|
|
for each NAME whose VALUE is given. If no VALUE is given, the name
|
|
and value of the alias is printed. Aliases are described in *note
|
|
Aliases::.
|
|
|
|
`bind'
|
|
bind [-m KEYMAP] [-lpsvPSVX]
|
|
bind [-m KEYMAP] [-q FUNCTION] [-u FUNCTION] [-r KEYSEQ]
|
|
bind [-m KEYMAP] -f FILENAME
|
|
bind [-m KEYMAP] -x KEYSEQ:SHELL-COMMAND
|
|
bind [-m KEYMAP] KEYSEQ:FUNCTION-NAME
|
|
bind READLINE-COMMAND
|
|
|
|
Display current Readline (*note Command Line Editing::) key and
|
|
function bindings, bind a key sequence to a Readline function or
|
|
macro, or set a Readline variable. Each non-option argument is a
|
|
command as it would appear in a Readline initialization file
|
|
(*note Readline Init File::), but each binding or command must be
|
|
passed as a separate argument; e.g.,
|
|
`"\C-x\C-r":re-read-init-file'.
|
|
|
|
Options, if supplied, have the following meanings:
|
|
|
|
`-m KEYMAP'
|
|
Use KEYMAP as the keymap to be affected by the subsequent
|
|
bindings. Acceptable KEYMAP names are `emacs',
|
|
`emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
|
|
`vi-command', and `vi-insert'. `vi' is equivalent to
|
|
`vi-command'; `emacs' is equivalent to `emacs-standard'.
|
|
|
|
`-l'
|
|
List the names of all Readline functions.
|
|
|
|
`-p'
|
|
Display Readline function names and bindings in such a way
|
|
that they can be used as input or in a Readline
|
|
initialization file.
|
|
|
|
`-P'
|
|
List current Readline function names and bindings.
|
|
|
|
`-v'
|
|
Display Readline variable names and values in such a way that
|
|
they can be used as input or in a Readline initialization
|
|
file.
|
|
|
|
`-V'
|
|
List current Readline variable names and values.
|
|
|
|
`-s'
|
|
Display Readline key sequences bound to macros and the
|
|
strings they output in such a way that they can be used as
|
|
input or in a Readline initialization file.
|
|
|
|
`-S'
|
|
Display Readline key sequences bound to macros and the
|
|
strings they output.
|
|
|
|
`-f FILENAME'
|
|
Read key bindings from FILENAME.
|
|
|
|
`-q FUNCTION'
|
|
Query about which keys invoke the named FUNCTION.
|
|
|
|
`-u FUNCTION'
|
|
Unbind all keys bound to the named FUNCTION.
|
|
|
|
`-r KEYSEQ'
|
|
Remove any current binding for KEYSEQ.
|
|
|
|
`-x KEYSEQ:SHELL-COMMAND'
|
|
Cause SHELL-COMMAND to be executed whenever KEYSEQ is entered.
|
|
When SHELL-COMMAND is executed, the shell sets the
|
|
`READLINE_LINE' variable to the contents of the Readline line
|
|
buffer and the `READLINE_POINT' variable to the current
|
|
location of the insertion point. If the executed command
|
|
changes the value of `READLINE_LINE' or `READLINE_POINT',
|
|
those new values will be reflected in the editing state.
|
|
|
|
`-X'
|
|
List all key sequences bound to shell commands and the
|
|
associated commands in a format that can be reused as input.
|
|
|
|
The return status is zero unless an invalid option is supplied or
|
|
an error occurs.
|
|
|
|
`builtin'
|
|
builtin [SHELL-BUILTIN [ARGS]]
|
|
|
|
Run a shell builtin, passing it ARGS, and return its exit status.
|
|
This is useful when defining a shell function with the same name
|
|
as a shell builtin, retaining the functionality of the builtin
|
|
within the function. The return status is non-zero if
|
|
SHELL-BUILTIN is not a shell builtin command.
|
|
|
|
`caller'
|
|
caller [EXPR]
|
|
|
|
Returns the context of any active subroutine call (a shell
|
|
function or a script executed with the `.' or `source' builtins).
|
|
|
|
Without EXPR, `caller' displays the line number and source
|
|
filename of the current subroutine call. If a non-negative
|
|
integer is supplied as EXPR, `caller' displays the line number,
|
|
subroutine name, and source file corresponding to that position in
|
|
the current execution call stack. This extra information may be
|
|
used, for example, to print a stack trace. The current frame is
|
|
frame 0.
|
|
|
|
The return value is 0 unless the shell is not executing a
|
|
subroutine call or EXPR does not correspond to a valid position in
|
|
the call stack.
|
|
|
|
`command'
|
|
command [-pVv] COMMAND [ARGUMENTS ...]
|
|
|
|
Runs COMMAND with ARGUMENTS ignoring any shell function named
|
|
COMMAND. Only shell builtin commands or commands found by
|
|
searching the `PATH' are executed. If there is a shell function
|
|
named `ls', running `command ls' within the function will execute
|
|
the external command `ls' instead of calling the function
|
|
recursively. The `-p' option means to use a default value for
|
|
`PATH' that is guaranteed to find all of the standard utilities.
|
|
The return status in this case is 127 if COMMAND cannot be found
|
|
or an error occurred, and the exit status of COMMAND otherwise.
|
|
|
|
If either the `-V' or `-v' option is supplied, a description of
|
|
COMMAND is printed. The `-v' option causes a single word
|
|
indicating the command or file name used to invoke COMMAND to be
|
|
displayed; the `-V' option produces a more verbose description.
|
|
In this case, the return status is zero if COMMAND is found, and
|
|
non-zero if not.
|
|
|
|
`declare'
|
|
declare [-aAfFgilnrtux] [-p] [NAME[=VALUE] ...]
|
|
|
|
Declare variables and give them attributes. If no NAMEs are
|
|
given, then display the values of variables instead.
|
|
|
|
The `-p' option will display the attributes and values of each
|
|
NAME. When `-p' is used with NAME arguments, additional options,
|
|
other than `-f' and `-F', are ignored.
|
|
|
|
When `-p' is supplied without NAME arguments, `declare' will
|
|
display the attributes and values of all variables having the
|
|
attributes specified by the additional options. If no other
|
|
options are supplied with `-p', `declare' will display the
|
|
attributes and values of all shell variables. The `-f' option
|
|
will restrict the display to shell functions.
|
|
|
|
The `-F' option inhibits the display of function definitions; only
|
|
the function name and attributes are printed. If the `extdebug'
|
|
shell option is enabled using `shopt' (*note The Shopt Builtin::),
|
|
the source file name and line number where the function is defined
|
|
are displayed as well. `-F' implies `-f'.
|
|
|
|
The `-g' option forces variables to be created or modified at the
|
|
global scope, even when `declare' is executed in a shell function.
|
|
It is ignored in all other cases.
|
|
|
|
The following options can be used to restrict output to variables
|
|
with the specified attributes or to give variables attributes:
|
|
|
|
`-a'
|
|
Each NAME is an indexed array variable (*note Arrays::).
|
|
|
|
`-A'
|
|
Each NAME is an associative array variable (*note Arrays::).
|
|
|
|
`-f'
|
|
Use function names only.
|
|
|
|
`-i'
|
|
The variable is to be treated as an integer; arithmetic
|
|
evaluation (*note Shell Arithmetic::) is performed when the
|
|
variable is assigned a value.
|
|
|
|
`-l'
|
|
When the variable is assigned a value, all upper-case
|
|
characters are converted to lower-case. The upper-case
|
|
attribute is disabled.
|
|
|
|
`-n'
|
|
Give each NAME the NAMEREF attribute, making it a name
|
|
reference to another variable. That other variable is
|
|
defined by the value of NAME. All references and assignments
|
|
to NAME, except for changing the `-n' attribute itself, are
|
|
performed on the variable referenced by NAME's value. The
|
|
`-n' attribute cannot be applied to array variables.
|
|
|
|
`-r'
|
|
Make NAMEs readonly. These names cannot then be assigned
|
|
values by subsequent assignment statements or unset.
|
|
|
|
`-t'
|
|
Give each NAME the `trace' attribute. Traced functions
|
|
inherit the `DEBUG' and `RETURN' traps from the calling shell.
|
|
The trace attribute has no special meaning for variables.
|
|
|
|
`-u'
|
|
When the variable is assigned a value, all lower-case
|
|
characters are converted to upper-case. The lower-case
|
|
attribute is disabled.
|
|
|
|
`-x'
|
|
Mark each NAME for export to subsequent commands via the
|
|
environment.
|
|
|
|
Using `+' instead of `-' turns off the attribute instead, with the
|
|
exceptions that `+a' may not be used to destroy an array variable
|
|
and `+r' will not remove the readonly attribute. When used in a
|
|
function, `declare' makes each NAME local, as with the `local'
|
|
command, unless the `-g' option is used. If a variable name is
|
|
followed by =VALUE, the value of the variable is set to VALUE.
|
|
|
|
The return status is zero unless an invalid option is encountered,
|
|
an attempt is made to define a function using `-f foo=bar', an
|
|
attempt is made to assign a value to a readonly variable, an
|
|
attempt is made to assign a value to an array variable without
|
|
using the compound assignment syntax (*note Arrays::), one of the
|
|
NAMES is not a valid shell variable name, an attempt is made to
|
|
turn off readonly status for a readonly variable, an attempt is
|
|
made to turn off array status for an array variable, or an attempt
|
|
is made to display a non-existent function with `-f'.
|
|
|
|
`echo'
|
|
echo [-neE] [ARG ...]
|
|
|
|
Output the ARGs, separated by spaces, terminated with a newline.
|
|
The return status is 0 unless a write error occurs. If `-n' is
|
|
specified, the trailing newline is suppressed. If the `-e' option
|
|
is given, interpretation of the following backslash-escaped
|
|
characters is enabled. The `-E' option disables the
|
|
interpretation of these escape characters, even on systems where
|
|
they are interpreted by default. The `xpg_echo' shell option may
|
|
be used to dynamically determine whether or not `echo' expands
|
|
these escape characters by default. `echo' does not interpret
|
|
`--' to mean the end of options.
|
|
|
|
`echo' interprets the following escape sequences:
|
|
`\a'
|
|
alert (bell)
|
|
|
|
`\b'
|
|
backspace
|
|
|
|
`\c'
|
|
suppress further output
|
|
|
|
`\e'
|
|
`\E'
|
|
escape
|
|
|
|
`\f'
|
|
form feed
|
|
|
|
`\n'
|
|
new line
|
|
|
|
`\r'
|
|
carriage return
|
|
|
|
`\t'
|
|
horizontal tab
|
|
|
|
`\v'
|
|
vertical tab
|
|
|
|
`\\'
|
|
backslash
|
|
|
|
`\0NNN'
|
|
the eight-bit character whose value is the octal value NNN
|
|
(zero to three octal digits)
|
|
|
|
`\xHH'
|
|
the eight-bit character whose value is the hexadecimal value
|
|
HH (one or two hex digits)
|
|
|
|
`\uHHHH'
|
|
the Unicode (ISO/IEC 10646) character whose value is the
|
|
hexadecimal value HHHH (one to four hex digits)
|
|
|
|
`\UHHHHHHHH'
|
|
the Unicode (ISO/IEC 10646) character whose value is the
|
|
hexadecimal value HHHHHHHH (one to eight hex digits)
|
|
|
|
`enable'
|
|
enable [-a] [-dnps] [-f FILENAME] [NAME ...]
|
|
|
|
Enable and disable builtin shell commands. Disabling a builtin
|
|
allows a disk command which has the same name as a shell builtin
|
|
to be executed without specifying a full pathname, even though the
|
|
shell normally searches for builtins before disk commands. If
|
|
`-n' is used, the NAMEs become disabled. Otherwise NAMEs are
|
|
enabled. For example, to use the `test' binary found via `$PATH'
|
|
instead of the shell builtin version, type `enable -n test'.
|
|
|
|
If the `-p' option is supplied, or no NAME arguments appear, a
|
|
list of shell builtins is printed. With no other arguments, the
|
|
list consists of all enabled shell builtins. The `-a' option
|
|
means to list each builtin with an indication of whether or not it
|
|
is enabled.
|
|
|
|
The `-f' option means to load the new builtin command NAME from
|
|
shared object FILENAME, on systems that support dynamic loading.
|
|
The `-d' option will delete a builtin loaded with `-f'.
|
|
|
|
If there are no options, a list of the shell builtins is displayed.
|
|
The `-s' option restricts `enable' to the POSIX special builtins.
|
|
If `-s' is used with `-f', the new builtin becomes a special
|
|
builtin (*note Special Builtins::).
|
|
|
|
The return status is zero unless a NAME is not a shell builtin or
|
|
there is an error loading a new builtin from a shared object.
|
|
|
|
`help'
|
|
help [-dms] [PATTERN]
|
|
|
|
Display helpful information about builtin commands. If PATTERN is
|
|
specified, `help' gives detailed help on all commands matching
|
|
PATTERN, otherwise a list of the builtins is printed.
|
|
|
|
Options, if supplied, have the following meanings:
|
|
|
|
`-d'
|
|
Display a short description of each PATTERN
|
|
|
|
`-m'
|
|
Display the description of each PATTERN in a manpage-like
|
|
format
|
|
|
|
`-s'
|
|
Display only a short usage synopsis for each PATTERN
|
|
|
|
The return status is zero unless no command matches PATTERN.
|
|
|
|
`let'
|
|
let EXPRESSION [EXPRESSION ...]
|
|
|
|
The `let' builtin allows arithmetic to be performed on shell
|
|
variables. Each EXPRESSION is evaluated according to the rules
|
|
given below in *note Shell Arithmetic::. If the last EXPRESSION
|
|
evaluates to 0, `let' returns 1; otherwise 0 is returned.
|
|
|
|
`local'
|
|
local [OPTION] NAME[=VALUE] ...
|
|
|
|
For each argument, a local variable named NAME is created, and
|
|
assigned VALUE. The OPTION can be any of the options accepted by
|
|
`declare'. `local' can only be used within a function; it makes
|
|
the variable NAME have a visible scope restricted to that function
|
|
and its children. The return status is zero unless `local' is
|
|
used outside a function, an invalid NAME is supplied, or NAME is a
|
|
readonly variable.
|
|
|
|
`logout'
|
|
logout [N]
|
|
|
|
Exit a login shell, returning a status of N to the shell's parent.
|
|
|
|
`mapfile'
|
|
mapfile [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD]
|
|
[-C CALLBACK] [-c QUANTUM] [ARRAY]
|
|
|
|
Read lines from the standard input into the indexed array variable
|
|
ARRAY, or from file descriptor FD if the `-u' option is supplied.
|
|
The variable `MAPFILE' is the default ARRAY. Options, if
|
|
supplied, have the following meanings:
|
|
|
|
`-n'
|
|
Copy at most COUNT lines. If COUNT is 0, all lines are
|
|
copied.
|
|
|
|
`-O'
|
|
Begin assigning to ARRAY at index ORIGIN. The default index
|
|
is 0.
|
|
|
|
`-s'
|
|
Discard the first COUNT lines read.
|
|
|
|
`-t'
|
|
Remove a trailing newline from each line read.
|
|
|
|
`-u'
|
|
Read lines from file descriptor FD instead of the standard
|
|
input.
|
|
|
|
`-C'
|
|
Evaluate CALLBACK each time QUANTUMP lines are read. The
|
|
`-c' option specifies QUANTUM.
|
|
|
|
`-c'
|
|
Specify the number of lines read between each call to
|
|
CALLBACK.
|
|
|
|
If `-C' is specified without `-c', the default quantum is 5000.
|
|
When CALLBACK is evaluated, it is supplied the index of the next
|
|
array element to be assigned and the line to be assigned to that
|
|
element as additional arguments. CALLBACK is evaluated after the
|
|
line is read but before the array element is assigned.
|
|
|
|
If not supplied with an explicit origin, `mapfile' will clear ARRAY
|
|
before assigning to it.
|
|
|
|
`mapfile' returns successfully unless an invalid option or option
|
|
argument is supplied, ARRAY is invalid or unassignable, or ARRAY
|
|
is not an indexed array.
|
|
|
|
`printf'
|
|
printf [-v VAR] FORMAT [ARGUMENTS]
|
|
|
|
Write the formatted ARGUMENTS to the standard output under the
|
|
control of the FORMAT. The `-v' option causes the output to be
|
|
assigned to the variable VAR rather than being printed to the
|
|
standard output.
|
|
|
|
The FORMAT is a character string which contains three types of
|
|
objects: plain characters, which are simply copied to standard
|
|
output, character escape sequences, which are converted and copied
|
|
to the standard output, and format specifications, each of which
|
|
causes printing of the next successive ARGUMENT. In addition to
|
|
the standard `printf(1)' formats, `printf' interprets the
|
|
following extensions:
|
|
|
|
`%b'
|
|
Causes `printf' to expand backslash escape sequences in the
|
|
corresponding ARGUMENT, except that `\c' terminates output,
|
|
backslashes in `\'', `\"', and `\?' are not removed, and
|
|
octal escapes beginning with `\0' may contain up to four
|
|
digits.
|
|
|
|
`%q'
|
|
Causes `printf' to output the corresponding ARGUMENT in a
|
|
format that can be reused as shell input.
|
|
|
|
`%(DATEFMT)T'
|
|
Causes `printf' to output the date-time string resulting from
|
|
using DATEFMT as a format string for `strftime'(3). The
|
|
corresponding ARGUMENT is an integer representing the number
|
|
of seconds since the epoch. Two special argument values may
|
|
be used: -1 represents the current time, and -2 represents
|
|
the time the shell was invoked. If no argument is specified,
|
|
conversion behaves as if -1 had been given. This is an
|
|
exception to the usual `printf' behavior.
|
|
|
|
Arguments to non-string format specifiers are treated as C
|
|
language constants, except that a leading plus or minus sign is
|
|
allowed, and if the leading character is a single or double quote,
|
|
the value is the ASCII value of the following character.
|
|
|
|
The FORMAT is reused as necessary to consume all of the ARGUMENTS.
|
|
If the FORMAT requires more ARGUMENTS than are supplied, the extra
|
|
format specifications behave as if a zero value or null string, as
|
|
appropriate, had been supplied. The return value is zero on
|
|
success, non-zero on failure.
|
|
|
|
`read'
|
|
read [-ers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS]
|
|
[-N NCHARS] [-p PROMPT] [-t TIMEOUT] [-u FD] [NAME ...]
|
|
|
|
One line is read from the standard input, or from the file
|
|
descriptor FD supplied as an argument to the `-u' option, and the
|
|
first word is assigned to the first NAME, the second word to the
|
|
second NAME, and so on, with leftover words and their intervening
|
|
separators assigned to the last NAME. If there are fewer words
|
|
read from the input stream than names, the remaining names are
|
|
assigned empty values. The characters in the value of the `IFS'
|
|
variable are used to split the line into words using the same
|
|
rules the shell uses for expansion (described above in *note Word
|
|
Splitting::). The backslash character `\' may be used to remove
|
|
any special meaning for the next character read and for line
|
|
continuation. If no names are supplied, the line read is assigned
|
|
to the variable `REPLY'. The return code is zero, unless
|
|
end-of-file is encountered, `read' times out (in which case the
|
|
return code is greater than 128), a variable assignment error
|
|
(such as assigning to a readonly variable) occurs, or an invalid
|
|
file descriptor is supplied as the argument to `-u'.
|
|
|
|
Options, if supplied, have the following meanings:
|
|
|
|
`-a ANAME'
|
|
The words are assigned to sequential indices of the array
|
|
variable ANAME, starting at 0. All elements are removed from
|
|
ANAME before the assignment. Other NAME arguments are
|
|
ignored.
|
|
|
|
`-d DELIM'
|
|
The first character of DELIM is used to terminate the input
|
|
line, rather than newline.
|
|
|
|
`-e'
|
|
Readline (*note Command Line Editing::) is used to obtain the
|
|
line. Readline uses the current (or default, if line editing
|
|
was not previously active) editing settings.
|
|
|
|
`-i TEXT'
|
|
If Readline is being used to read the line, TEXT is placed
|
|
into the editing buffer before editing begins.
|
|
|
|
`-n NCHARS'
|
|
`read' returns after reading NCHARS characters rather than
|
|
waiting for a complete line of input, but honor a delimiter
|
|
if fewer than NCHARS characters are read before the delimiter.
|
|
|
|
`-N NCHARS'
|
|
`read' returns after reading exactly NCHARS characters rather
|
|
than waiting for a complete line of input, unless EOF is
|
|
encountered or `read' times out. Delimiter characters
|
|
encountered in the input are not treated specially and do not
|
|
cause `read' to return until NCHARS characters are read.
|
|
|
|
`-p PROMPT'
|
|
Display PROMPT, without a trailing newline, before attempting
|
|
to read any input. The prompt is displayed only if input is
|
|
coming from a terminal.
|
|
|
|
`-r'
|
|
If this option is given, backslash does not act as an escape
|
|
character. The backslash is considered to be part of the
|
|
line. In particular, a backslash-newline pair may not be
|
|
used as a line continuation.
|
|
|
|
`-s'
|
|
Silent mode. If input is coming from a terminal, characters
|
|
are not echoed.
|
|
|
|
`-t TIMEOUT'
|
|
Cause `read' to time out and return failure if a complete
|
|
line of input (or a specified number of characters) is not
|
|
read within TIMEOUT seconds. TIMEOUT may be a decimal
|
|
number with a fractional portion following the decimal point.
|
|
This option is only effective if `read' is reading input from
|
|
a terminal, pipe, or other special file; it has no effect
|
|
when reading from regular files. If `read' times out, `read'
|
|
saves any partial input read into the specified variable NAME.
|
|
If TIMEOUT is 0, `read' returns immediately, without trying to
|
|
read and data. The exit status is 0 if input is available on
|
|
the specified file descriptor, non-zero otherwise. The exit
|
|
status is greater than 128 if the timeout is exceeded.
|
|
|
|
`-u FD'
|
|
Read input from file descriptor FD.
|
|
|
|
`readarray'
|
|
readarray [-n COUNT] [-O ORIGIN] [-s COUNT] [-t] [-u FD]
|
|
[-C CALLBACK] [-c QUANTUM] [ARRAY]
|
|
|
|
Read lines from the standard input into the indexed array variable
|
|
ARRAY, or from file descriptor FD if the `-u' option is supplied.
|
|
|
|
A synonym for `mapfile'.
|
|
|
|
`source'
|
|
source FILENAME
|
|
|
|
A synonym for `.' (*note Bourne Shell Builtins::).
|
|
|
|
`type'
|
|
type [-afptP] [NAME ...]
|
|
|
|
For each NAME, indicate how it would be interpreted if used as a
|
|
command name.
|
|
|
|
If the `-t' option is used, `type' prints a single word which is
|
|
one of `alias', `function', `builtin', `file' or `keyword', if
|
|
NAME is an alias, shell function, shell builtin, disk file, or
|
|
shell reserved word, respectively. If the NAME is not found, then
|
|
nothing is printed, and `type' returns a failure status.
|
|
|
|
If the `-p' option is used, `type' either returns the name of the
|
|
disk file that would be executed, or nothing if `-t' would not
|
|
return `file'.
|
|
|
|
The `-P' option forces a path search for each NAME, even if `-t'
|
|
would not return `file'.
|
|
|
|
If a command is hashed, `-p' and `-P' print the hashed value,
|
|
which is not necessarily the file that appears first in `$PATH'.
|
|
|
|
If the `-a' option is used, `type' returns all of the places that
|
|
contain an executable named FILE. This includes aliases and
|
|
functions, if and only if the `-p' option is not also used.
|
|
|
|
If the `-f' option is used, `type' does not attempt to find shell
|
|
functions, as with the `command' builtin.
|
|
|
|
The return status is zero if all of the NAMES are found, non-zero
|
|
if any are not found.
|
|
|
|
`typeset'
|
|
typeset [-afFgrxilnrtux] [-p] [NAME[=VALUE] ...]
|
|
|
|
The `typeset' command is supplied for compatibility with the Korn
|
|
shell. It is a synonym for the `declare' builtin command.
|
|
|
|
`ulimit'
|
|
ulimit [-abcdefilmnpqrstuvxHST] [LIMIT]
|
|
|
|
`ulimit' provides control over the resources available to processes
|
|
started by the shell, on systems that allow such control. If an
|
|
option is given, it is interpreted as follows:
|
|
|
|
`-S'
|
|
Change and report the soft limit associated with a resource.
|
|
|
|
`-H'
|
|
Change and report the hard limit associated with a resource.
|
|
|
|
`-a'
|
|
All current limits are reported.
|
|
|
|
`-b'
|
|
The maximum socket buffer size.
|
|
|
|
`-c'
|
|
The maximum size of core files created.
|
|
|
|
`-d'
|
|
The maximum size of a process's data segment.
|
|
|
|
`-e'
|
|
The maximum scheduling priority ("nice").
|
|
|
|
`-f'
|
|
The maximum size of files written by the shell and its
|
|
children.
|
|
|
|
`-i'
|
|
The maximum number of pending signals.
|
|
|
|
`-l'
|
|
The maximum size that may be locked into memory.
|
|
|
|
`-m'
|
|
The maximum resident set size (many systems do not honor this
|
|
limit).
|
|
|
|
`-n'
|
|
The maximum number of open file descriptors (most systems do
|
|
not allow this value to be set).
|
|
|
|
`-p'
|
|
The pipe buffer size.
|
|
|
|
`-q'
|
|
The maximum number of bytes in POSIX message queues.
|
|
|
|
`-r'
|
|
The maximum real-time scheduling priority.
|
|
|
|
`-s'
|
|
The maximum stack size.
|
|
|
|
`-t'
|
|
The maximum amount of cpu time in seconds.
|
|
|
|
`-u'
|
|
The maximum number of processes available to a single user.
|
|
|
|
`-v'
|
|
The maximum amount of virtual memory available to the shell,
|
|
and, on some systems, to its children.
|
|
|
|
`-x'
|
|
The maximum number of file locks.
|
|
|
|
`-T'
|
|
The maximum number of threads.
|
|
|
|
If LIMIT is given, and the `-a' option is not used, LIMIT is the
|
|
new value of the specified resource. The special LIMIT values
|
|
`hard', `soft', and `unlimited' stand for the current hard limit,
|
|
the current soft limit, and no limit, respectively. A hard limit
|
|
cannot be increased by a non-root user once it is set; a soft
|
|
limit may be increased up to the value of the hard limit.
|
|
Otherwise, the current value of the soft limit for the specified
|
|
resource is printed, unless the `-H' option is supplied. When
|
|
setting new limits, if neither `-H' nor `-S' is supplied, both the
|
|
hard and soft limits are set. If no option is given, then `-f' is
|
|
assumed. Values are in 1024-byte increments, except for `-t',
|
|
which is in seconds; `-p', which is in units of 512-byte blocks;
|
|
and `-T', `-b', `-n' and `-u', which are unscaled values.
|
|
|
|
The return status is zero unless an invalid option or argument is
|
|
supplied, or an error occurs while setting a new limit.
|
|
|
|
`unalias'
|
|
unalias [-a] [NAME ... ]
|
|
|
|
Remove each NAME from the list of aliases. If `-a' is supplied,
|
|
all aliases are removed. Aliases are described in *note Aliases::.
|
|
|
|
|
|
File: bashref.info, Node: Modifying Shell Behavior, Next: Special Builtins, Prev: Bash Builtins, Up: Shell Builtin Commands
|
|
|
|
4.3 Modifying Shell Behavior
|
|
============================
|
|
|
|
* Menu:
|
|
|
|
* The Set Builtin:: Change the values of shell attributes and
|
|
positional parameters.
|
|
* The Shopt Builtin:: Modify shell optional behavior.
|
|
|
|
|
|
File: bashref.info, Node: The Set Builtin, Next: The Shopt Builtin, Up: Modifying Shell Behavior
|
|
|
|
4.3.1 The Set Builtin
|
|
---------------------
|
|
|
|
This builtin is so complicated that it deserves its own section. `set'
|
|
allows you to change the values of shell options and set the positional
|
|
parameters, or to display the names and values of shell variables.
|
|
|
|
`set'
|
|
set [--abefhkmnptuvxBCEHPT] [-o OPTION-NAME] [ARGUMENT ...]
|
|
set [+abefhkmnptuvxBCEHPT] [+o OPTION-NAME] [ARGUMENT ...]
|
|
|
|
If no options or arguments are supplied, `set' displays the names
|
|
and values of all shell variables and functions, sorted according
|
|
to the current locale, in a format that may be reused as input for
|
|
setting or resetting the currently-set variables. Read-only
|
|
variables cannot be reset. In POSIX mode, only shell variables
|
|
are listed.
|
|
|
|
When options are supplied, they set or unset shell attributes.
|
|
Options, if specified, have the following meanings:
|
|
|
|
`-a'
|
|
Mark variables and function which are modified or created for
|
|
export to the environment of subsequent commands.
|
|
|
|
`-b'
|
|
Cause the status of terminated background jobs to be reported
|
|
immediately, rather than before printing the next primary
|
|
prompt.
|
|
|
|
`-e'
|
|
Exit immediately if a pipeline (*note Pipelines::), which may
|
|
consist of a single simple command (*note Simple Commands::),
|
|
a list (*note Lists::), or a compound command (*note Compound
|
|
Commands::) returns a non-zero status. The shell does not
|
|
exit if the command that fails is part of the command list
|
|
immediately following a `while' or `until' keyword, part of
|
|
the test in an `if' statement, part of any command executed
|
|
in a `&&' or `||' list except the command following the final
|
|
`&&' or `||', any command in a pipeline but the last, or if
|
|
the command's return status is being inverted with `!'. If a
|
|
compound command other than a subshell returns a non-zero
|
|
status because a command failed while `-e' was being ignored,
|
|
the shell does not exit. A trap on `ERR', if set, is
|
|
executed before the shell exits.
|
|
|
|
This option applies to the shell environment and each
|
|
subshell environment separately (*note Command Execution
|
|
Environment::), and may cause subshells to exit before
|
|
executing all the commands in the subshell.
|
|
|
|
If a compound command or shell function executes in a context
|
|
where `-e' is being ignored, none of the commands executed
|
|
within the compound command or function body will be affected
|
|
by the `-e' setting, even if `-e' is set and a command
|
|
returns a failure status. If a compound command or shell
|
|
function sets `-e' while executing in a context where `-e' is
|
|
ignored, that setting will not have any effect until the
|
|
compound command or the command containing the function call
|
|
completes.
|
|
|
|
`-f'
|
|
Disable filename expansion (globbing).
|
|
|
|
`-h'
|
|
Locate and remember (hash) commands as they are looked up for
|
|
execution. This option is enabled by default.
|
|
|
|
`-k'
|
|
All arguments in the form of assignment statements are placed
|
|
in the environment for a command, not just those that precede
|
|
the command name.
|
|
|
|
`-m'
|
|
Job control is enabled (*note Job Control::). All processes
|
|
run in a separate process group. When a background job
|
|
completes, the shell prints a line containing its exit status.
|
|
|
|
`-n'
|
|
Read commands but do not execute them; this may be used to
|
|
check a script for syntax errors. This option is ignored by
|
|
interactive shells.
|
|
|
|
`-o OPTION-NAME'
|
|
Set the option corresponding to OPTION-NAME:
|
|
|
|
`allexport'
|
|
Same as `-a'.
|
|
|
|
`braceexpand'
|
|
Same as `-B'.
|
|
|
|
`emacs'
|
|
Use an `emacs'-style line editing interface (*note
|
|
Command Line Editing::). This also affects the editing
|
|
interface used for `read -e'.
|
|
|
|
`errexit'
|
|
Same as `-e'.
|
|
|
|
`errtrace'
|
|
Same as `-E'.
|
|
|
|
`functrace'
|
|
Same as `-T'.
|
|
|
|
`hashall'
|
|
Same as `-h'.
|
|
|
|
`histexpand'
|
|
Same as `-H'.
|
|
|
|
`history'
|
|
Enable command history, as described in *note Bash
|
|
History Facilities::. This option is on by default in
|
|
interactive shells.
|
|
|
|
`ignoreeof'
|
|
An interactive shell will not exit upon reading EOF.
|
|
|
|
`keyword'
|
|
Same as `-k'.
|
|
|
|
`monitor'
|
|
Same as `-m'.
|
|
|
|
`noclobber'
|
|
Same as `-C'.
|
|
|
|
`noexec'
|
|
Same as `-n'.
|
|
|
|
`noglob'
|
|
Same as `-f'.
|
|
|
|
`nolog'
|
|
Currently ignored.
|
|
|
|
`notify'
|
|
Same as `-b'.
|
|
|
|
`nounset'
|
|
Same as `-u'.
|
|
|
|
`onecmd'
|
|
Same as `-t'.
|
|
|
|
`physical'
|
|
Same as `-P'.
|
|
|
|
`pipefail'
|
|
If set, the return value of a pipeline is the value of
|
|
the last (rightmost) command to exit with a non-zero
|
|
status, or zero if all commands in the pipeline exit
|
|
successfully. This option is disabled by default.
|
|
|
|
`posix'
|
|
Change the behavior of Bash where the default operation
|
|
differs from the POSIX standard to match the standard
|
|
(*note Bash POSIX Mode::). This is intended to make
|
|
Bash behave as a strict superset of that standard.
|
|
|
|
`privileged'
|
|
Same as `-p'.
|
|
|
|
`verbose'
|
|
Same as `-v'.
|
|
|
|
`vi'
|
|
Use a `vi'-style line editing interface. This also
|
|
affects the editing interface used for `read -e'.
|
|
|
|
`xtrace'
|
|
Same as `-x'.
|
|
|
|
`-p'
|
|
Turn on privileged mode. In this mode, the `$BASH_ENV' and
|
|
`$ENV' files are not processed, shell functions are not
|
|
inherited from the environment, and the `SHELLOPTS',
|
|
`BASHOPTS', `CDPATH' and `GLOBIGNORE' variables, if they
|
|
appear in the environment, are ignored. If the shell is
|
|
started with the effective user (group) id not equal to the
|
|
real user (group) id, and the `-p' option is not supplied,
|
|
these actions are taken and the effective user id is set to
|
|
the real user id. If the `-p' option is supplied at startup,
|
|
the effective user id is not reset. Turning this option off
|
|
causes the effective user and group ids to be set to the real
|
|
user and group ids.
|
|
|
|
`-t'
|
|
Exit after reading and executing one command.
|
|
|
|
`-u'
|
|
Treat unset variables and parameters other than the special
|
|
parameters `@' or `*' as an error when performing parameter
|
|
expansion. An error message will be written to the standard
|
|
error, and a non-interactive shell will exit.
|
|
|
|
`-v'
|
|
Print shell input lines as they are read.
|
|
|
|
`-x'
|
|
Print a trace of simple commands, `for' commands, `case'
|
|
commands, `select' commands, and arithmetic `for' commands
|
|
and their arguments or associated word lists after they are
|
|
expanded and before they are executed. The value of the `PS4'
|
|
variable is expanded and the resultant value is printed before
|
|
the command and its expanded arguments.
|
|
|
|
`-B'
|
|
The shell will perform brace expansion (*note Brace
|
|
Expansion::). This option is on by default.
|
|
|
|
`-C'
|
|
Prevent output redirection using `>', `>&', and `<>' from
|
|
overwriting existing files.
|
|
|
|
`-E'
|
|
If set, any trap on `ERR' is inherited by shell functions,
|
|
command substitutions, and commands executed in a subshell
|
|
environment. The `ERR' trap is normally not inherited in
|
|
such cases.
|
|
|
|
`-H'
|
|
Enable `!' style history substitution (*note History
|
|
Interaction::). This option is on by default for interactive
|
|
shells.
|
|
|
|
`-P'
|
|
If set, do not resolve symbolic links when performing
|
|
commands such as `cd' which change the current directory.
|
|
The physical directory is used instead. By default, Bash
|
|
follows the logical chain of directories when performing
|
|
commands which change the current directory.
|
|
|
|
For example, if `/usr/sys' is a symbolic link to
|
|
`/usr/local/sys' then:
|
|
$ cd /usr/sys; echo $PWD
|
|
/usr/sys
|
|
$ cd ..; pwd
|
|
/usr
|
|
|
|
If `set -P' is on, then:
|
|
$ cd /usr/sys; echo $PWD
|
|
/usr/local/sys
|
|
$ cd ..; pwd
|
|
/usr/local
|
|
|
|
`-T'
|
|
If set, any trap on `DEBUG' and `RETURN' are inherited by
|
|
shell functions, command substitutions, and commands executed
|
|
in a subshell environment. The `DEBUG' and `RETURN' traps
|
|
are normally not inherited in such cases.
|
|
|
|
`--'
|
|
If no arguments follow this option, then the positional
|
|
parameters are unset. Otherwise, the positional parameters
|
|
are set to the ARGUMENTS, even if some of them begin with a
|
|
`-'.
|
|
|
|
`-'
|
|
Signal the end of options, cause all remaining ARGUMENTS to
|
|
be assigned to the positional parameters. The `-x' and `-v'
|
|
options are turned off. If there are no arguments, the
|
|
positional parameters remain unchanged.
|
|
|
|
Using `+' rather than `-' causes these options to be turned off.
|
|
The options can also be used upon invocation of the shell. The
|
|
current set of options may be found in `$-'.
|
|
|
|
The remaining N ARGUMENTS are positional parameters and are
|
|
assigned, in order, to `$1', `$2', ... `$N'. The special
|
|
parameter `#' is set to N.
|
|
|
|
The return status is always zero unless an invalid option is
|
|
supplied.
|
|
|
|
|
|
File: bashref.info, Node: The Shopt Builtin, Prev: The Set Builtin, Up: Modifying Shell Behavior
|
|
|
|
4.3.2 The Shopt Builtin
|
|
-----------------------
|
|
|
|
This builtin allows you to change additional shell optional behavior.
|
|
|
|
`shopt'
|
|
shopt [-pqsu] [-o] [OPTNAME ...]
|
|
|
|
Toggle the values of settings controlling optional shell behavior.
|
|
The settings can be either those listed below, or, if the `-o'
|
|
option is used, those available with the `-o' option to the `set'
|
|
builtin command (*note The Set Builtin::). With no options, or
|
|
with the `-p' option, a list of all settable options is displayed,
|
|
with an indication of whether or not each is set. The `-p' option
|
|
causes output to be displayed in a form that may be reused as
|
|
input. Other options have the following meanings:
|
|
|
|
`-s'
|
|
Enable (set) each OPTNAME.
|
|
|
|
`-u'
|
|
Disable (unset) each OPTNAME.
|
|
|
|
`-q'
|
|
Suppresses normal output; the return status indicates whether
|
|
the OPTNAME is set or unset. If multiple OPTNAME arguments
|
|
are given with `-q', the return status is zero if all
|
|
OPTNAMES are enabled; non-zero otherwise.
|
|
|
|
`-o'
|
|
Restricts the values of OPTNAME to be those defined for the
|
|
`-o' option to the `set' builtin (*note The Set Builtin::).
|
|
|
|
If either `-s' or `-u' is used with no OPTNAME arguments, `shopt'
|
|
shows only those options which are set or unset, respectively.
|
|
|
|
Unless otherwise noted, the `shopt' options are disabled (off) by
|
|
default.
|
|
|
|
The return status when listing options is zero if all OPTNAMES are
|
|
enabled, non-zero otherwise. When setting or unsetting options,
|
|
the return status is zero unless an OPTNAME is not a valid shell
|
|
option.
|
|
|
|
The list of `shopt' options is:
|
|
`autocd'
|
|
If set, a command name that is the name of a directory is
|
|
executed as if it were the argument to the `cd' command.
|
|
This option is only used by interactive shells.
|
|
|
|
`cdable_vars'
|
|
If this is set, an argument to the `cd' builtin command that
|
|
is not a directory is assumed to be the name of a variable
|
|
whose value is the directory to change to.
|
|
|
|
`cdspell'
|
|
If set, minor errors in the spelling of a directory component
|
|
in a `cd' command will be corrected. The errors checked for
|
|
are transposed characters, a missing character, and a
|
|
character too many. If a correction is found, the corrected
|
|
path is printed, and the command proceeds. This option is
|
|
only used by interactive shells.
|
|
|
|
`checkhash'
|
|
If this is set, Bash checks that a command found in the hash
|
|
table exists before trying to execute it. If a hashed
|
|
command no longer exists, a normal path search is performed.
|
|
|
|
`checkjobs'
|
|
If set, Bash lists the status of any stopped and running jobs
|
|
before exiting an interactive shell. If any jobs are
|
|
running, this causes the exit to be deferred until a second
|
|
exit is attempted without an intervening command (*note Job
|
|
Control::). The shell always postpones exiting if any jobs
|
|
are stopped.
|
|
|
|
`checkwinsize'
|
|
If set, Bash checks the window size after each command and,
|
|
if necessary, updates the values of `LINES' and `COLUMNS'.
|
|
|
|
`cmdhist'
|
|
If set, Bash attempts to save all lines of a multiple-line
|
|
command in the same history entry. This allows easy
|
|
re-editing of multi-line commands.
|
|
|
|
`compat31'
|
|
If set, Bash changes its behavior to that of version 3.1 with
|
|
respect to quoted arguments to the conditional command's `=~'
|
|
operator and with respect to locale-specific string
|
|
comparison when using the `[[' conditional command's `<' and
|
|
`>' operators. Bash versions prior to bash-4.1 use ASCII
|
|
collation and strcmp(3); bash-4.1 and later use the current
|
|
locale's collation sequence and strcoll(3).
|
|
|
|
`compat32'
|
|
If set, Bash changes its behavior to that of version 3.2 with
|
|
respect to locale-specific string comparison when using the
|
|
`[[' conditional command's `<' and `>' operators (see
|
|
previous item).
|
|
|
|
`compat40'
|
|
If set, Bash changes its behavior to that of version 4.0 with
|
|
respect to locale-specific string comparison when using the
|
|
`[[' conditional command's `<' and `>' operators (see
|
|
description of `compat31') and the effect of interrupting a
|
|
command list. Bash versions 4.0 and later interrupt the list
|
|
as if the shell received the interrupt; previous versions
|
|
continue with the next command in the list.
|
|
|
|
`compat41'
|
|
If set, Bash, when in POSIX mode, treats a single quote in a
|
|
double-quoted parameter expansion as a special character.
|
|
The single quotes must match (an even number) and the
|
|
characters between the single quotes are considered quoted.
|
|
This is the behavior of POSIX mode through version 4.1. The
|
|
default Bash behavior remains as in previous versions.
|
|
|
|
`compat42'
|
|
If set, Bash does not process the replacement string in the
|
|
pattern substitution word expansion using quote removal.
|
|
|
|
`complete_fullquote'
|
|
If set, Bash quotes all shell metacharacters in filenames and
|
|
directory names when performing completion. If not set, Bash
|
|
removes metacharacters such as the dollar sign from the set of
|
|
characters that will be quoted in completed filenames when
|
|
these metacharacters appear in shell variable references in
|
|
words to be completed. This means that dollar signs in
|
|
variable names that expand to directories will not be quoted;
|
|
however, any dollar signs appearing in filenames will not be
|
|
quoted, either. This is active only when bash is using
|
|
backslashes to quote completed filenames. This variable is
|
|
set by default, which is the default Bash behavior in
|
|
versions through 4.2.
|
|
|
|
`direxpand'
|
|
If set, Bash replaces directory names with the results of
|
|
word expansion when performing filename completion. This
|
|
changes the contents of the readline editing buffer. If not
|
|
set, Bash attempts to preserve what the user typed.
|
|
|
|
`dirspell'
|
|
If set, Bash attempts spelling correction on directory names
|
|
during word completion if the directory name initially
|
|
supplied does not exist.
|
|
|
|
`dotglob'
|
|
If set, Bash includes filenames beginning with a `.' in the
|
|
results of filename expansion.
|
|
|
|
`execfail'
|
|
If this is set, a non-interactive shell will not exit if it
|
|
cannot execute the file specified as an argument to the `exec'
|
|
builtin command. An interactive shell does not exit if `exec'
|
|
fails.
|
|
|
|
`expand_aliases'
|
|
If set, aliases are expanded as described below under Aliases,
|
|
*note Aliases::. This option is enabled by default for
|
|
interactive shells.
|
|
|
|
`extdebug'
|
|
If set, behavior intended for use by debuggers is enabled:
|
|
|
|
1. The `-F' option to the `declare' builtin (*note Bash
|
|
Builtins::) displays the source file name and line
|
|
number corresponding to each function name supplied as
|
|
an argument.
|
|
|
|
2. If the command run by the `DEBUG' trap returns a
|
|
non-zero value, the next command is skipped and not
|
|
executed.
|
|
|
|
3. If the command run by the `DEBUG' trap returns a value
|
|
of 2, and the shell is executing in a subroutine (a
|
|
shell function or a shell script executed by the `.' or
|
|
`source' builtins), a call to `return' is simulated.
|
|
|
|
4. `BASH_ARGC' and `BASH_ARGV' are updated as described in
|
|
their descriptions (*note Bash Variables::).
|
|
|
|
5. Function tracing is enabled: command substitution,
|
|
shell functions, and subshells invoked with `( COMMAND
|
|
)' inherit the `DEBUG' and `RETURN' traps.
|
|
|
|
6. Error tracing is enabled: command substitution, shell
|
|
functions, and subshells invoked with `( COMMAND )'
|
|
inherit the `ERR' trap.
|
|
|
|
`extglob'
|
|
If set, the extended pattern matching features described above
|
|
(*note Pattern Matching::) are enabled.
|
|
|
|
`extquote'
|
|
If set, `$'STRING'' and `$"STRING"' quoting is performed
|
|
within `${PARAMETER}' expansions enclosed in double quotes.
|
|
This option is enabled by default.
|
|
|
|
`failglob'
|
|
If set, patterns which fail to match filenames during
|
|
filename expansion result in an expansion error.
|
|
|
|
`force_fignore'
|
|
If set, the suffixes specified by the `FIGNORE' shell variable
|
|
cause words to be ignored when performing word completion
|
|
even if the ignored words are the only possible completions.
|
|
*Note Bash Variables::, for a description of `FIGNORE'. This
|
|
option is enabled by default.
|
|
|
|
`globasciiranges'
|
|
If set, range expressions used in pattern matching bracket
|
|
expressions (*note Pattern Matching::) behave as if in the
|
|
traditional C locale when performing comparisons. That is,
|
|
the current locale's collating sequence is not taken into
|
|
account, so `b' will not collate between `A' and `B', and
|
|
upper-case and lower-case ASCII characters will collate
|
|
together.
|
|
|
|
`globstar'
|
|
If set, the pattern `**' used in a filename expansion context
|
|
will match all files and zero or more directories and
|
|
subdirectories. If the pattern is followed by a `/', only
|
|
directories and subdirectories match.
|
|
|
|
`gnu_errfmt'
|
|
If set, shell error messages are written in the standard GNU
|
|
error message format.
|
|
|
|
`histappend'
|
|
If set, the history list is appended to the file named by the
|
|
value of the `HISTFILE' variable when the shell exits, rather
|
|
than overwriting the file.
|
|
|
|
`histreedit'
|
|
If set, and Readline is being used, a user is given the
|
|
opportunity to re-edit a failed history substitution.
|
|
|
|
`histverify'
|
|
If set, and Readline is being used, the results of history
|
|
substitution are not immediately passed to the shell parser.
|
|
Instead, the resulting line is loaded into the Readline
|
|
editing buffer, allowing further modification.
|
|
|
|
`hostcomplete'
|
|
If set, and Readline is being used, Bash will attempt to
|
|
perform hostname completion when a word containing a `@' is
|
|
being completed (*note Commands For Completion::). This
|
|
option is enabled by default.
|
|
|
|
`huponexit'
|
|
If set, Bash will send `SIGHUP' to all jobs when an
|
|
interactive login shell exits (*note Signals::).
|
|
|
|
`interactive_comments'
|
|
Allow a word beginning with `#' to cause that word and all
|
|
remaining characters on that line to be ignored in an
|
|
interactive shell. This option is enabled by default.
|
|
|
|
`lastpipe'
|
|
If set, and job control is not active, the shell runs the
|
|
last command of a pipeline not executed in the background in
|
|
the current shell environment.
|
|
|
|
`lithist'
|
|
If enabled, and the `cmdhist' option is enabled, multi-line
|
|
commands are saved to the history with embedded newlines
|
|
rather than using semicolon separators where possible.
|
|
|
|
`login_shell'
|
|
The shell sets this option if it is started as a login shell
|
|
(*note Invoking Bash::). The value may not be changed.
|
|
|
|
`mailwarn'
|
|
If set, and a file that Bash is checking for mail has been
|
|
accessed since the last time it was checked, the message
|
|
`"The mail in MAILFILE has been read"' is displayed.
|
|
|
|
`no_empty_cmd_completion'
|
|
If set, and Readline is being used, Bash will not attempt to
|
|
search the `PATH' for possible completions when completion is
|
|
attempted on an empty line.
|
|
|
|
`nocaseglob'
|
|
If set, Bash matches filenames in a case-insensitive fashion
|
|
when performing filename expansion.
|
|
|
|
`nocasematch'
|
|
If set, Bash matches patterns in a case-insensitive fashion
|
|
when performing matching while executing `case' or `[['
|
|
conditional commands.
|
|
|
|
`nullglob'
|
|
If set, Bash allows filename patterns which match no files to
|
|
expand to a null string, rather than themselves.
|
|
|
|
`progcomp'
|
|
If set, the programmable completion facilities (*note
|
|
Programmable Completion::) are enabled. This option is
|
|
enabled by default.
|
|
|
|
`promptvars'
|
|
If set, prompt strings undergo parameter expansion, command
|
|
substitution, arithmetic expansion, and quote removal after
|
|
being expanded as described below (*note Controlling the
|
|
Prompt::). This option is enabled by default.
|
|
|
|
`restricted_shell'
|
|
The shell sets this option if it is started in restricted mode
|
|
(*note The Restricted Shell::). The value may not be changed.
|
|
This is not reset when the startup files are executed,
|
|
allowing the startup files to discover whether or not a shell
|
|
is restricted.
|
|
|
|
`shift_verbose'
|
|
If this is set, the `shift' builtin prints an error message
|
|
when the shift count exceeds the number of positional
|
|
parameters.
|
|
|
|
`sourcepath'
|
|
If set, the `source' builtin uses the value of `PATH' to find
|
|
the directory containing the file supplied as an argument.
|
|
This option is enabled by default.
|
|
|
|
`xpg_echo'
|
|
If set, the `echo' builtin expands backslash-escape sequences
|
|
by default.
|
|
|
|
|
|
The return status when listing options is zero if all OPTNAMES are
|
|
enabled, non-zero otherwise. When setting or unsetting options,
|
|
the return status is zero unless an OPTNAME is not a valid shell
|
|
option.
|
|
|
|
|
|
File: bashref.info, Node: Special Builtins, Prev: Modifying Shell Behavior, Up: Shell Builtin Commands
|
|
|
|
4.4 Special Builtins
|
|
====================
|
|
|
|
For historical reasons, the POSIX standard has classified several
|
|
builtin commands as _special_. When Bash is executing in POSIX mode,
|
|
the special builtins differ from other builtin commands in three
|
|
respects:
|
|
|
|
1. Special builtins are found before shell functions during command
|
|
lookup.
|
|
|
|
2. If a special builtin returns an error status, a non-interactive
|
|
shell exits.
|
|
|
|
3. Assignment statements preceding the command stay in effect in the
|
|
shell environment after the command completes.
|
|
|
|
When Bash is not executing in POSIX mode, these builtins behave no
|
|
differently than the rest of the Bash builtin commands. The Bash POSIX
|
|
mode is described in *note Bash POSIX Mode::.
|
|
|
|
These are the POSIX special builtins:
|
|
break : . continue eval exec exit export readonly return set
|
|
shift trap unset
|
|
|
|
|
|
File: bashref.info, Node: Shell Variables, Next: Bash Features, Prev: Shell Builtin Commands, Up: Top
|
|
|
|
5 Shell Variables
|
|
*****************
|
|
|
|
* Menu:
|
|
|
|
* Bourne Shell Variables:: Variables which Bash uses in the same way
|
|
as the Bourne Shell.
|
|
* Bash Variables:: List of variables that exist in Bash.
|
|
|
|
This chapter describes the shell variables that Bash uses. Bash
|
|
automatically assigns default values to a number of variables.
|
|
|
|
|
|
File: bashref.info, Node: Bourne Shell Variables, Next: Bash Variables, Up: Shell Variables
|
|
|
|
5.1 Bourne Shell Variables
|
|
==========================
|
|
|
|
Bash uses certain shell variables in the same way as the Bourne shell.
|
|
In some cases, Bash assigns a default value to the variable.
|
|
|
|
`CDPATH'
|
|
A colon-separated list of directories used as a search path for
|
|
the `cd' builtin command.
|
|
|
|
`HOME'
|
|
The current user's home directory; the default for the `cd' builtin
|
|
command. The value of this variable is also used by tilde
|
|
expansion (*note Tilde Expansion::).
|
|
|
|
`IFS'
|
|
A list of characters that separate fields; used when the shell
|
|
splits words as part of expansion.
|
|
|
|
`MAIL'
|
|
If this parameter is set to a filename or directory name and the
|
|
`MAILPATH' variable is not set, Bash informs the user of the
|
|
arrival of mail in the specified file or Maildir-format directory.
|
|
|
|
`MAILPATH'
|
|
A colon-separated list of filenames which the shell periodically
|
|
checks for new mail. Each list entry can specify the message that
|
|
is printed when new mail arrives in the mail file by separating
|
|
the filename from the message with a `?'. When used in the text
|
|
of the message, `$_' expands to the name of the current mail file.
|
|
|
|
`OPTARG'
|
|
The value of the last option argument processed by the `getopts'
|
|
builtin.
|
|
|
|
`OPTIND'
|
|
The index of the last option argument processed by the `getopts'
|
|
builtin.
|
|
|
|
`PATH'
|
|
A colon-separated list of directories in which the shell looks for
|
|
commands. A zero-length (null) directory name in the value of
|
|
`PATH' indicates the current directory. A null directory name may
|
|
appear as two adjacent colons, or as an initial or trailing colon.
|
|
|
|
`PS1'
|
|
The primary prompt string. The default value is `\s-\v\$ '.
|
|
*Note Controlling the Prompt::, for the complete list of escape
|
|
sequences that are expanded before `PS1' is displayed.
|
|
|
|
`PS2'
|
|
The secondary prompt string. The default value is `> '.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Bash Variables, Prev: Bourne Shell Variables, Up: Shell Variables
|
|
|
|
5.2 Bash Variables
|
|
==================
|
|
|
|
These variables are set or used by Bash, but other shells do not
|
|
normally treat them specially.
|
|
|
|
A few variables used by Bash are described in different chapters:
|
|
variables for controlling the job control facilities (*note Job Control
|
|
Variables::).
|
|
|
|
`BASH'
|
|
The full pathname used to execute the current instance of Bash.
|
|
|
|
`BASHOPTS'
|
|
A colon-separated list of enabled shell options. Each word in the
|
|
list is a valid argument for the `-s' option to the `shopt'
|
|
builtin command (*note The Shopt Builtin::). The options
|
|
appearing in `BASHOPTS' are those reported as `on' by `shopt'. If
|
|
this variable is in the environment when Bash starts up, each
|
|
shell option in the list will be enabled before reading any
|
|
startup files. This variable is readonly.
|
|
|
|
`BASHPID'
|
|
Expands to the process ID of the current Bash process. This
|
|
differs from `$$' under certain circumstances, such as subshells
|
|
that do not require Bash to be re-initialized.
|
|
|
|
`BASH_ALIASES'
|
|
An associative array variable whose members correspond to the
|
|
internal list of aliases as maintained by the `alias' builtin.
|
|
(*note Bourne Shell Builtins::). Elements added to this array
|
|
appear in the alias list; unsetting array elements cause aliases
|
|
to be removed from the alias list.
|
|
|
|
`BASH_ARGC'
|
|
An array variable whose values are the number of parameters in each
|
|
frame of the current bash execution call stack. The number of
|
|
parameters to the current subroutine (shell function or script
|
|
executed with `.' or `source') is at the top of the stack. When a
|
|
subroutine is executed, the number of parameters passed is pushed
|
|
onto `BASH_ARGC'. The shell sets `BASH_ARGC' only when in
|
|
extended debugging mode (see *note The Shopt Builtin:: for a
|
|
description of the `extdebug' option to the `shopt' builtin).
|
|
|
|
`BASH_ARGV'
|
|
An array variable containing all of the parameters in the current
|
|
bash execution call stack. The final parameter of the last
|
|
subroutine call is at the top of the stack; the first parameter of
|
|
the initial call is at the bottom. When a subroutine is executed,
|
|
the parameters supplied are pushed onto `BASH_ARGV'. The shell
|
|
sets `BASH_ARGV' only when in extended debugging mode (see *note
|
|
The Shopt Builtin:: for a description of the `extdebug' option to
|
|
the `shopt' builtin).
|
|
|
|
`BASH_CMDS'
|
|
An associative array variable whose members correspond to the
|
|
internal hash table of commands as maintained by the `hash' builtin
|
|
(*note Bourne Shell Builtins::). Elements added to this array
|
|
appear in the hash table; unsetting array elements cause commands
|
|
to be removed from the hash table.
|
|
|
|
`BASH_COMMAND'
|
|
The command currently being executed or about to be executed,
|
|
unless the shell is executing a command as the result of a trap,
|
|
in which case it is the command executing at the time of the trap.
|
|
|
|
`BASH_COMPAT'
|
|
The value is used to set the shell's compatibility level. *Note
|
|
The Shopt Builtin::, for a description of the various compatibility
|
|
levels and their effects. The value may be a decimal number
|
|
(e.g., 4.2) or an integer (e.g., 42) corresponding to the desired
|
|
compatibility level. If `BASH_COMPAT' is unset or set to the
|
|
empty string, the compatibility level is set to the default for
|
|
the current version. If `BASH_COMPAT' is set to a value that is
|
|
not one of the valid compatibility levels, the shell prints an
|
|
error message and sets the compatibility level to the default for
|
|
the current version. The valid compatibility levels correspond to
|
|
the compatibility options accepted by the `shopt' builtin
|
|
described above (for example, COMPAT42 means that 4.2 and 42 are
|
|
valid values). The current version is also a valid value.
|
|
|
|
`BASH_ENV'
|
|
If this variable is set when Bash is invoked to execute a shell
|
|
script, its value is expanded and used as the name of a startup
|
|
file to read before executing the script. *Note Bash Startup
|
|
Files::.
|
|
|
|
`BASH_EXECUTION_STRING'
|
|
The command argument to the `-c' invocation option.
|
|
|
|
`BASH_LINENO'
|
|
An array variable whose members are the line numbers in source
|
|
files where each corresponding member of FUNCNAME was invoked.
|
|
`${BASH_LINENO[$i]}' is the line number in the source file
|
|
(`${BASH_SOURCE[$i+1]}') where `${FUNCNAME[$i]}' was called (or
|
|
`${BASH_LINENO[$i-1]}' if referenced within another shell
|
|
function). Use `LINENO' to obtain the current line number.
|
|
|
|
`BASH_REMATCH'
|
|
An array variable whose members are assigned by the `=~' binary
|
|
operator to the `[[' conditional command (*note Conditional
|
|
Constructs::). The element with index 0 is the portion of the
|
|
string matching the entire regular expression. The element with
|
|
index N is the portion of the string matching the Nth
|
|
parenthesized subexpression. This variable is read-only.
|
|
|
|
`BASH_SOURCE'
|
|
An array variable whose members are the source filenames where the
|
|
corresponding shell function names in the `FUNCNAME' array
|
|
variable are defined. The shell function `${FUNCNAME[$i]}' is
|
|
defined in the file `${BASH_SOURCE[$i]}' and called from
|
|
`${BASH_SOURCE[$i+1]}'
|
|
|
|
`BASH_SUBSHELL'
|
|
Incremented by one within each subshell or subshell environment
|
|
when the shell begins executing in that environment. The initial
|
|
value is 0.
|
|
|
|
`BASH_VERSINFO'
|
|
A readonly array variable (*note Arrays::) whose members hold
|
|
version information for this instance of Bash. The values
|
|
assigned to the array members are as follows:
|
|
|
|
`BASH_VERSINFO[0]'
|
|
The major version number (the RELEASE).
|
|
|
|
`BASH_VERSINFO[1]'
|
|
The minor version number (the VERSION).
|
|
|
|
`BASH_VERSINFO[2]'
|
|
The patch level.
|
|
|
|
`BASH_VERSINFO[3]'
|
|
The build version.
|
|
|
|
`BASH_VERSINFO[4]'
|
|
The release status (e.g., BETA1).
|
|
|
|
`BASH_VERSINFO[5]'
|
|
The value of `MACHTYPE'.
|
|
|
|
`BASH_VERSION'
|
|
The version number of the current instance of Bash.
|
|
|
|
`BASH_XTRACEFD'
|
|
If set to an integer corresponding to a valid file descriptor, Bash
|
|
will write the trace output generated when `set -x' is enabled to
|
|
that file descriptor. This allows tracing output to be separated
|
|
from diagnostic and error messages. The file descriptor is closed
|
|
when `BASH_XTRACEFD' is unset or assigned a new value. Unsetting
|
|
`BASH_XTRACEFD' or assigning it the empty string causes the trace
|
|
output to be sent to the standard error. Note that setting
|
|
`BASH_XTRACEFD' to 2 (the standard error file descriptor) and then
|
|
unsetting it will result in the standard error being closed.
|
|
|
|
`CHILD_MAX'
|
|
Set the number of exited child status values for the shell to
|
|
remember. Bash will not allow this value to be decreased below a
|
|
POSIX-mandated minimum, and there is a maximum value (currently
|
|
8192) that this may not exceed. The minimum value is
|
|
system-dependent.
|
|
|
|
`COLUMNS'
|
|
Used by the `select' command to determine the terminal width when
|
|
printing selection lists. Automatically set if the `checkwinsize'
|
|
option is enabled (*note The Shopt Builtin::), or in an
|
|
interactive shell upon receipt of a `SIGWINCH'.
|
|
|
|
`COMP_CWORD'
|
|
An index into `${COMP_WORDS}' of the word containing the current
|
|
cursor position. This variable is available only in shell
|
|
functions invoked by the programmable completion facilities (*note
|
|
Programmable Completion::).
|
|
|
|
`COMP_LINE'
|
|
The current command line. This variable is available only in
|
|
shell functions and external commands invoked by the programmable
|
|
completion facilities (*note Programmable Completion::).
|
|
|
|
`COMP_POINT'
|
|
The index of the current cursor position relative to the beginning
|
|
of the current command. If the current cursor position is at the
|
|
end of the current command, the value of this variable is equal to
|
|
`${#COMP_LINE}'. This variable is available only in shell
|
|
functions and external commands invoked by the programmable
|
|
completion facilities (*note Programmable Completion::).
|
|
|
|
`COMP_TYPE'
|
|
Set to an integer value corresponding to the type of completion
|
|
attempted that caused a completion function to be called: TAB, for
|
|
normal completion, `?', for listing completions after successive
|
|
tabs, `!', for listing alternatives on partial word completion,
|
|
`@', to list completions if the word is not unmodified, or `%',
|
|
for menu completion. This variable is available only in shell
|
|
functions and external commands invoked by the programmable
|
|
completion facilities (*note Programmable Completion::).
|
|
|
|
`COMP_KEY'
|
|
The key (or final key of a key sequence) used to invoke the current
|
|
completion function.
|
|
|
|
`COMP_WORDBREAKS'
|
|
The set of characters that the Readline library treats as word
|
|
separators when performing word completion. If `COMP_WORDBREAKS'
|
|
is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
|
|
`COMP_WORDS'
|
|
An array variable consisting of the individual words in the
|
|
current command line. The line is split into words as Readline
|
|
would split it, using `COMP_WORDBREAKS' as described above. This
|
|
variable is available only in shell functions invoked by the
|
|
programmable completion facilities (*note Programmable
|
|
Completion::).
|
|
|
|
`COMPREPLY'
|
|
An array variable from which Bash reads the possible completions
|
|
generated by a shell function invoked by the programmable
|
|
completion facility (*note Programmable Completion::). Each array
|
|
element contains one possible completion.
|
|
|
|
`COPROC'
|
|
An array variable created to hold the file descriptors for output
|
|
from and input to an unnamed coprocess (*note Coprocesses::).
|
|
|
|
`DIRSTACK'
|
|
An array variable containing the current contents of the directory
|
|
stack. Directories appear in the stack in the order they are
|
|
displayed by the `dirs' builtin. Assigning to members of this
|
|
array variable may be used to modify directories already in the
|
|
stack, but the `pushd' and `popd' builtins must be used to add and
|
|
remove directories. Assignment to this variable will not change
|
|
the current directory. If `DIRSTACK' is unset, it loses its
|
|
special properties, even if it is subsequently reset.
|
|
|
|
`EMACS'
|
|
If Bash finds this variable in the environment when the shell
|
|
starts with value `t', it assumes that the shell is running in an
|
|
Emacs shell buffer and disables line editing.
|
|
|
|
`ENV'
|
|
Similar to `BASH_ENV'; used when the shell is invoked in POSIX
|
|
Mode (*note Bash POSIX Mode::).
|
|
|
|
`EUID'
|
|
The numeric effective user id of the current user. This variable
|
|
is readonly.
|
|
|
|
`FCEDIT'
|
|
The editor used as a default by the `-e' option to the `fc'
|
|
builtin command.
|
|
|
|
`FIGNORE'
|
|
A colon-separated list of suffixes to ignore when performing
|
|
filename completion. A filename whose suffix matches one of the
|
|
entries in `FIGNORE' is excluded from the list of matched
|
|
filenames. A sample value is `.o:~'
|
|
|
|
`FUNCNAME'
|
|
An array variable containing the names of all shell functions
|
|
currently in the execution call stack. The element with index 0
|
|
is the name of any currently-executing shell function. The
|
|
bottom-most element (the one with the highest index) is `"main"'.
|
|
This variable exists only when a shell function is executing.
|
|
Assignments to `FUNCNAME' have no effect and return an error
|
|
status. If `FUNCNAME' is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
|
|
This variable can be used with `BASH_LINENO' and `BASH_SOURCE'.
|
|
Each element of `FUNCNAME' has corresponding elements in
|
|
`BASH_LINENO' and `BASH_SOURCE' to describe the call stack. For
|
|
instance, `${FUNCNAME[$i]}' was called from the file
|
|
`${BASH_SOURCE[$i+1]}' at line number `${BASH_LINENO[$i]}'. The
|
|
`caller' builtin displays the current call stack using this
|
|
information.
|
|
|
|
`FUNCNEST'
|
|
If set to a numeric value greater than 0, defines a maximum
|
|
function nesting level. Function invocations that exceed this
|
|
nesting level will cause the current command to abort.
|
|
|
|
`GLOBIGNORE'
|
|
A colon-separated list of patterns defining the set of filenames to
|
|
be ignored by filename expansion. If a filename matched by a
|
|
filename expansion pattern also matches one of the patterns in
|
|
`GLOBIGNORE', it is removed from the list of matches.
|
|
|
|
`GROUPS'
|
|
An array variable containing the list of groups of which the
|
|
current user is a member. Assignments to `GROUPS' have no effect
|
|
and return an error status. If `GROUPS' is unset, it loses its
|
|
special properties, even if it is subsequently reset.
|
|
|
|
`histchars'
|
|
Up to three characters which control history expansion, quick
|
|
substitution, and tokenization (*note History Interaction::). The
|
|
first character is the HISTORY EXPANSION character, that is, the
|
|
character which signifies the start of a history expansion,
|
|
normally `!'. The second character is the character which
|
|
signifies `quick substitution' when seen as the first character on
|
|
a line, normally `^'. The optional third character is the
|
|
character which indicates that the remainder of the line is a
|
|
comment when found as the first character of a word, usually `#'.
|
|
The history comment character causes history substitution to be
|
|
skipped for the remaining words on the line. It does not
|
|
necessarily cause the shell parser to treat the rest of the line
|
|
as a comment.
|
|
|
|
`HISTCMD'
|
|
The history number, or index in the history list, of the current
|
|
command. If `HISTCMD' is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
|
|
`HISTCONTROL'
|
|
A colon-separated list of values controlling how commands are
|
|
saved on the history list. If the list of values includes
|
|
`ignorespace', lines which begin with a space character are not
|
|
saved in the history list. A value of `ignoredups' causes lines
|
|
which match the previous history entry to not be saved. A value
|
|
of `ignoreboth' is shorthand for `ignorespace' and `ignoredups'.
|
|
A value of `erasedups' causes all previous lines matching the
|
|
current line to be removed from the history list before that line
|
|
is saved. Any value not in the above list is ignored. If
|
|
`HISTCONTROL' is unset, or does not include a valid value, all
|
|
lines read by the shell parser are saved on the history list,
|
|
subject to the value of `HISTIGNORE'. The second and subsequent
|
|
lines of a multi-line compound command are not tested, and are
|
|
added to the history regardless of the value of `HISTCONTROL'.
|
|
|
|
`HISTFILE'
|
|
The name of the file to which the command history is saved. The
|
|
default value is `~/.bash_history'.
|
|
|
|
`HISTFILESIZE'
|
|
The maximum number of lines contained in the history file. When
|
|
this variable is assigned a value, the history file is truncated,
|
|
if necessary, to contain no more than that number of lines by
|
|
removing the oldest entries. The history file is also truncated
|
|
to this size after writing it when a shell exits. If the value is
|
|
0, the history file is truncated to zero size. Non-numeric values
|
|
and numeric values less than zero inhibit truncation. The shell
|
|
sets the default value to the value of `HISTSIZE' after reading
|
|
any startup files.
|
|
|
|
`HISTIGNORE'
|
|
A colon-separated list of patterns used to decide which command
|
|
lines should be saved on the history list. Each pattern is
|
|
anchored at the beginning of the line and must match the complete
|
|
line (no implicit `*' is appended). Each pattern is tested
|
|
against the line after the checks specified by `HISTCONTROL' are
|
|
applied. In addition to the normal shell pattern matching
|
|
characters, `&' matches the previous history line. `&' may be
|
|
escaped using a backslash; the backslash is removed before
|
|
attempting a match. The second and subsequent lines of a
|
|
multi-line compound command are not tested, and are added to the
|
|
history regardless of the value of `HISTIGNORE'.
|
|
|
|
`HISTIGNORE' subsumes the function of `HISTCONTROL'. A pattern of
|
|
`&' is identical to `ignoredups', and a pattern of `[ ]*' is
|
|
identical to `ignorespace'. Combining these two patterns,
|
|
separating them with a colon, provides the functionality of
|
|
`ignoreboth'.
|
|
|
|
`HISTSIZE'
|
|
The maximum number of commands to remember on the history list.
|
|
If the value is 0, commands are not saved in the history list.
|
|
Numeric values less than zero result in every command being saved
|
|
on the history list (there is no limit). The shell sets the
|
|
default value to 500 after reading any startup files.
|
|
|
|
`HISTTIMEFORMAT'
|
|
If this variable is set and not null, its value is used as a
|
|
format string for STRFTIME to print the time stamp associated with
|
|
each history entry displayed by the `history' builtin. If this
|
|
variable is set, time stamps are written to the history file so
|
|
they may be preserved across shell sessions. This uses the
|
|
history comment character to distinguish timestamps from other
|
|
history lines.
|
|
|
|
`HOSTFILE'
|
|
Contains the name of a file in the same format as `/etc/hosts' that
|
|
should be read when the shell needs to complete a hostname. The
|
|
list of possible hostname completions may be changed while the
|
|
shell is running; the next time hostname completion is attempted
|
|
after the value is changed, Bash adds the contents of the new file
|
|
to the existing list. If `HOSTFILE' is set, but has no value, or
|
|
does not name a readable file, Bash attempts to read `/etc/hosts'
|
|
to obtain the list of possible hostname completions. When
|
|
`HOSTFILE' is unset, the hostname list is cleared.
|
|
|
|
`HOSTNAME'
|
|
The name of the current host.
|
|
|
|
`HOSTTYPE'
|
|
A string describing the machine Bash is running on.
|
|
|
|
`IGNOREEOF'
|
|
Controls the action of the shell on receipt of an `EOF' character
|
|
as the sole input. If set, the value denotes the number of
|
|
consecutive `EOF' characters that can be read as the first
|
|
character on an input line before the shell will exit. If the
|
|
variable exists but does not have a numeric value (or has no
|
|
value) then the default is 10. If the variable does not exist,
|
|
then `EOF' signifies the end of input to the shell. This is only
|
|
in effect for interactive shells.
|
|
|
|
`INPUTRC'
|
|
The name of the Readline initialization file, overriding the
|
|
default of `~/.inputrc'.
|
|
|
|
`LANG'
|
|
Used to determine the locale category for any category not
|
|
specifically selected with a variable starting with `LC_'.
|
|
|
|
`LC_ALL'
|
|
This variable overrides the value of `LANG' and any other `LC_'
|
|
variable specifying a locale category.
|
|
|
|
`LC_COLLATE'
|
|
This variable determines the collation order used when sorting the
|
|
results of filename expansion, and determines the behavior of
|
|
range expressions, equivalence classes, and collating sequences
|
|
within filename expansion and pattern matching (*note Filename
|
|
Expansion::).
|
|
|
|
`LC_CTYPE'
|
|
This variable determines the interpretation of characters and the
|
|
behavior of character classes within filename expansion and pattern
|
|
matching (*note Filename Expansion::).
|
|
|
|
`LC_MESSAGES'
|
|
This variable determines the locale used to translate double-quoted
|
|
strings preceded by a `$' (*note Locale Translation::).
|
|
|
|
`LC_NUMERIC'
|
|
This variable determines the locale category used for number
|
|
formatting.
|
|
|
|
`LINENO'
|
|
The line number in the script or shell function currently
|
|
executing.
|
|
|
|
`LINES'
|
|
Used by the `select' command to determine the column length for
|
|
printing selection lists. Automatically set if the `checkwinsize'
|
|
option is enabled (*note The Shopt Builtin::), or in an
|
|
interactive shell upon receipt of a `SIGWINCH'.
|
|
|
|
`MACHTYPE'
|
|
A string that fully describes the system type on which Bash is
|
|
executing, in the standard GNU CPU-COMPANY-SYSTEM format.
|
|
|
|
`MAILCHECK'
|
|
How often (in seconds) that the shell should check for mail in the
|
|
files specified in the `MAILPATH' or `MAIL' variables. The
|
|
default is 60 seconds. When it is time to check for mail, the
|
|
shell does so before displaying the primary prompt. If this
|
|
variable is unset, or set to a value that is not a number greater
|
|
than or equal to zero, the shell disables mail checking.
|
|
|
|
`MAPFILE'
|
|
An array variable created to hold the text read by the `mapfile'
|
|
builtin when no variable name is supplied.
|
|
|
|
`OLDPWD'
|
|
The previous working directory as set by the `cd' builtin.
|
|
|
|
`OPTERR'
|
|
If set to the value 1, Bash displays error messages generated by
|
|
the `getopts' builtin command.
|
|
|
|
`OSTYPE'
|
|
A string describing the operating system Bash is running on.
|
|
|
|
`PIPESTATUS'
|
|
An array variable (*note Arrays::) containing a list of exit
|
|
status values from the processes in the most-recently-executed
|
|
foreground pipeline (which may contain only a single command).
|
|
|
|
`POSIXLY_CORRECT'
|
|
If this variable is in the environment when Bash starts, the shell
|
|
enters POSIX mode (*note Bash POSIX Mode::) before reading the
|
|
startup files, as if the `--posix' invocation option had been
|
|
supplied. If it is set while the shell is running, Bash enables
|
|
POSIX mode, as if the command
|
|
`set -o posix'
|
|
had been executed.
|
|
|
|
`PPID'
|
|
The process ID of the shell's parent process. This variable is
|
|
readonly.
|
|
|
|
`PROMPT_COMMAND'
|
|
If set, the value is interpreted as a command to execute before
|
|
the printing of each primary prompt (`$PS1').
|
|
|
|
`PROMPT_DIRTRIM'
|
|
If set to a number greater than zero, the value is used as the
|
|
number of trailing directory components to retain when expanding
|
|
the `\w' and `\W' prompt string escapes (*note Controlling the
|
|
Prompt::). Characters removed are replaced with an ellipsis.
|
|
|
|
`PS3'
|
|
The value of this variable is used as the prompt for the `select'
|
|
command. If this variable is not set, the `select' command
|
|
prompts with `#? '
|
|
|
|
`PS4'
|
|
The value is the prompt printed before the command line is echoed
|
|
when the `-x' option is set (*note The Set Builtin::). The first
|
|
character of `PS4' is replicated multiple times, as necessary, to
|
|
indicate multiple levels of indirection. The default is `+ '.
|
|
|
|
`PWD'
|
|
The current working directory as set by the `cd' builtin.
|
|
|
|
`RANDOM'
|
|
Each time this parameter is referenced, a random integer between 0
|
|
and 32767 is generated. Assigning a value to this variable seeds
|
|
the random number generator.
|
|
|
|
`READLINE_LINE'
|
|
The contents of the Readline line buffer, for use with `bind -x'
|
|
(*note Bash Builtins::).
|
|
|
|
`READLINE_POINT'
|
|
The position of the insertion point in the Readline line buffer,
|
|
for use with `bind -x' (*note Bash Builtins::).
|
|
|
|
`REPLY'
|
|
The default variable for the `read' builtin.
|
|
|
|
`SECONDS'
|
|
This variable expands to the number of seconds since the shell was
|
|
started. Assignment to this variable resets the count to the
|
|
value assigned, and the expanded value becomes the value assigned
|
|
plus the number of seconds since the assignment.
|
|
|
|
`SHELL'
|
|
The full pathname to the shell is kept in this environment
|
|
variable. If it is not set when the shell starts, Bash assigns to
|
|
it the full pathname of the current user's login shell.
|
|
|
|
`SHELLOPTS'
|
|
A colon-separated list of enabled shell options. Each word in the
|
|
list is a valid argument for the `-o' option to the `set' builtin
|
|
command (*note The Set Builtin::). The options appearing in
|
|
`SHELLOPTS' are those reported as `on' by `set -o'. If this
|
|
variable is in the environment when Bash starts up, each shell
|
|
option in the list will be enabled before reading any startup
|
|
files. This variable is readonly.
|
|
|
|
`SHLVL'
|
|
Incremented by one each time a new instance of Bash is started.
|
|
This is intended to be a count of how deeply your Bash shells are
|
|
nested.
|
|
|
|
`TIMEFORMAT'
|
|
The value of this parameter is used as a format string specifying
|
|
how the timing information for pipelines prefixed with the `time'
|
|
reserved word should be displayed. The `%' character introduces an
|
|
escape sequence that is expanded to a time value or other
|
|
information. The escape sequences and their meanings are as
|
|
follows; the braces denote optional portions.
|
|
|
|
`%%'
|
|
A literal `%'.
|
|
|
|
`%[P][l]R'
|
|
The elapsed time in seconds.
|
|
|
|
`%[P][l]U'
|
|
The number of CPU seconds spent in user mode.
|
|
|
|
`%[P][l]S'
|
|
The number of CPU seconds spent in system mode.
|
|
|
|
`%P'
|
|
The CPU percentage, computed as (%U + %S) / %R.
|
|
|
|
The optional P is a digit specifying the precision, the number of
|
|
fractional digits after a decimal point. A value of 0 causes no
|
|
decimal point or fraction to be output. At most three places
|
|
after the decimal point may be specified; values of P greater than
|
|
3 are changed to 3. If P is not specified, the value 3 is used.
|
|
|
|
The optional `l' specifies a longer format, including minutes, of
|
|
the form MMmSS.FFs. The value of P determines whether or not the
|
|
fraction is included.
|
|
|
|
If this variable is not set, Bash acts as if it had the value
|
|
`$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS''
|
|
If the value is null, no timing information is displayed. A
|
|
trailing newline is added when the format string is displayed.
|
|
|
|
`TMOUT'
|
|
If set to a value greater than zero, `TMOUT' is treated as the
|
|
default timeout for the `read' builtin (*note Bash Builtins::).
|
|
The `select' command (*note Conditional Constructs::) terminates
|
|
if input does not arrive after `TMOUT' seconds when input is coming
|
|
from a terminal.
|
|
|
|
In an interactive shell, the value is interpreted as the number of
|
|
seconds to wait for a line of input after issuing the primary
|
|
prompt. Bash terminates after waiting for that number of seconds
|
|
if a complete line of input does not arrive.
|
|
|
|
`TMPDIR'
|
|
If set, Bash uses its value as the name of a directory in which
|
|
Bash creates temporary files for the shell's use.
|
|
|
|
`UID'
|
|
The numeric real user id of the current user. This variable is
|
|
readonly.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Bash Features, Next: Job Control, Prev: Shell Variables, Up: Top
|
|
|
|
6 Bash Features
|
|
***************
|
|
|
|
This chapter describes features unique to Bash.
|
|
|
|
* Menu:
|
|
|
|
* Invoking Bash:: Command line options that you can give
|
|
to Bash.
|
|
* Bash Startup Files:: When and how Bash executes scripts.
|
|
* Interactive Shells:: What an interactive shell is.
|
|
* Bash Conditional Expressions:: Primitives used in composing expressions for
|
|
the `test' builtin.
|
|
* Shell Arithmetic:: Arithmetic on shell variables.
|
|
* Aliases:: Substituting one command for another.
|
|
* Arrays:: Array Variables.
|
|
* The Directory Stack:: History of visited directories.
|
|
* Controlling the Prompt:: Customizing the various prompt strings.
|
|
* The Restricted Shell:: A more controlled mode of shell execution.
|
|
* Bash POSIX Mode:: Making Bash behave more closely to what
|
|
the POSIX standard specifies.
|
|
|
|
|
|
File: bashref.info, Node: Invoking Bash, Next: Bash Startup Files, Up: Bash Features
|
|
|
|
6.1 Invoking Bash
|
|
=================
|
|
|
|
bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] [ARGUMENT ...]
|
|
bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] -c STRING [ARGUMENT ...]
|
|
bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o OPTION] [-O SHOPT_OPTION] [ARGUMENT ...]
|
|
|
|
All of the single-character options used with the `set' builtin
|
|
(*note The Set Builtin::) can be used as options when the shell is
|
|
invoked. In addition, there are several multi-character options that
|
|
you can use. These options must appear on the command line before the
|
|
single-character options to be recognized.
|
|
|
|
`--debugger'
|
|
Arrange for the debugger profile to be executed before the shell
|
|
starts. Turns on extended debugging mode (see *note The Shopt
|
|
Builtin:: for a description of the `extdebug' option to the `shopt'
|
|
builtin).
|
|
|
|
`--dump-po-strings'
|
|
A list of all double-quoted strings preceded by `$' is printed on
|
|
the standard output in the GNU `gettext' PO (portable object) file
|
|
format. Equivalent to `-D' except for the output format.
|
|
|
|
`--dump-strings'
|
|
Equivalent to `-D'.
|
|
|
|
`--help'
|
|
Display a usage message on standard output and exit successfully.
|
|
|
|
`--init-file FILENAME'
|
|
`--rcfile FILENAME'
|
|
Execute commands from FILENAME (instead of `~/.bashrc') in an
|
|
interactive shell.
|
|
|
|
`--login'
|
|
Equivalent to `-l'.
|
|
|
|
`--noediting'
|
|
Do not use the GNU Readline library (*note Command Line Editing::)
|
|
to read command lines when the shell is interactive.
|
|
|
|
`--noprofile'
|
|
Don't load the system-wide startup file `/etc/profile' or any of
|
|
the personal initialization files `~/.bash_profile',
|
|
`~/.bash_login', or `~/.profile' when Bash is invoked as a login
|
|
shell.
|
|
|
|
`--norc'
|
|
Don't read the `~/.bashrc' initialization file in an interactive
|
|
shell. This is on by default if the shell is invoked as `sh'.
|
|
|
|
`--posix'
|
|
Change the behavior of Bash where the default operation differs
|
|
from the POSIX standard to match the standard. This is intended
|
|
to make Bash behave as a strict superset of that standard. *Note
|
|
Bash POSIX Mode::, for a description of the Bash POSIX mode.
|
|
|
|
`--restricted'
|
|
Make the shell a restricted shell (*note The Restricted Shell::).
|
|
|
|
`--verbose'
|
|
Equivalent to `-v'. Print shell input lines as they're read.
|
|
|
|
`--version'
|
|
Show version information for this instance of Bash on the standard
|
|
output and exit successfully.
|
|
|
|
There are several single-character options that may be supplied at
|
|
invocation which are not available with the `set' builtin.
|
|
|
|
`-c'
|
|
Read and execute commands from the first non-option ARGUMENT after
|
|
processing the options, then exit. Any remaining arguments are
|
|
assigned to the positional parameters, starting with `$0'.
|
|
|
|
`-i'
|
|
Force the shell to run interactively. Interactive shells are
|
|
described in *note Interactive Shells::.
|
|
|
|
`-l'
|
|
Make this shell act as if it had been directly invoked by login.
|
|
When the shell is interactive, this is equivalent to starting a
|
|
login shell with `exec -l bash'. When the shell is not
|
|
interactive, the login shell startup files will be executed.
|
|
`exec bash -l' or `exec bash --login' will replace the current
|
|
shell with a Bash login shell. *Note Bash Startup Files::, for a
|
|
description of the special behavior of a login shell.
|
|
|
|
`-r'
|
|
Make the shell a restricted shell (*note The Restricted Shell::).
|
|
|
|
`-s'
|
|
If this option is present, or if no arguments remain after option
|
|
processing, then commands are read from the standard input. This
|
|
option allows the positional parameters to be set when invoking an
|
|
interactive shell.
|
|
|
|
`-D'
|
|
A list of all double-quoted strings preceded by `$' is printed on
|
|
the standard output. These are the strings that are subject to
|
|
language translation when the current locale is not `C' or `POSIX'
|
|
(*note Locale Translation::). This implies the `-n' option; no
|
|
commands will be executed.
|
|
|
|
`[-+]O [SHOPT_OPTION]'
|
|
SHOPT_OPTION is one of the shell options accepted by the `shopt'
|
|
builtin (*note The Shopt Builtin::). If SHOPT_OPTION is present,
|
|
`-O' sets the value of that option; `+O' unsets it. If
|
|
SHOPT_OPTION is not supplied, the names and values of the shell
|
|
options accepted by `shopt' are printed on the standard output.
|
|
If the invocation option is `+O', the output is displayed in a
|
|
format that may be reused as input.
|
|
|
|
`--'
|
|
A `--' signals the end of options and disables further option
|
|
processing. Any arguments after the `--' are treated as filenames
|
|
and arguments.
|
|
|
|
A _login_ shell is one whose first character of argument zero is
|
|
`-', or one invoked with the `--login' option.
|
|
|
|
An _interactive_ shell is one started without non-option arguments,
|
|
unless `-s' is specified, without specifying the `-c' option, and whose
|
|
input and output are both connected to terminals (as determined by
|
|
`isatty(3)'), or one started with the `-i' option. *Note Interactive
|
|
Shells::, for more information.
|
|
|
|
If arguments remain after option processing, and neither the `-c'
|
|
nor the `-s' option has been supplied, the first argument is assumed to
|
|
be the name of a file containing shell commands (*note Shell Scripts::).
|
|
When Bash is invoked in this fashion, `$0' is set to the name of the
|
|
file, and the positional parameters are set to the remaining arguments.
|
|
Bash reads and executes commands from this file, then exits. Bash's
|
|
exit status is the exit status of the last command executed in the
|
|
script. If no commands are executed, the exit status is 0.
|
|
|
|
|
|
File: bashref.info, Node: Bash Startup Files, Next: Interactive Shells, Prev: Invoking Bash, Up: Bash Features
|
|
|
|
6.2 Bash Startup Files
|
|
======================
|
|
|
|
This section describes how Bash executes its startup files. If any of
|
|
the files exist but cannot be read, Bash reports an error. Tildes are
|
|
expanded in filenames as described above under Tilde Expansion (*note
|
|
Tilde Expansion::).
|
|
|
|
Interactive shells are described in *note Interactive Shells::.
|
|
|
|
Invoked as an interactive login shell, or with `--login'
|
|
........................................................
|
|
|
|
When Bash is invoked as an interactive login shell, or as a
|
|
non-interactive shell with the `--login' option, it first reads and
|
|
executes commands from the file `/etc/profile', if that file exists.
|
|
After reading that file, it looks for `~/.bash_profile',
|
|
`~/.bash_login', and `~/.profile', in that order, and reads and
|
|
executes commands from the first one that exists and is readable. The
|
|
`--noprofile' option may be used when the shell is started to inhibit
|
|
this behavior.
|
|
|
|
When a login shell exits, Bash reads and executes commands from the
|
|
file `~/.bash_logout', if it exists.
|
|
|
|
Invoked as an interactive non-login shell
|
|
.........................................
|
|
|
|
When an interactive shell that is not a login shell is started, Bash
|
|
reads and executes commands from `~/.bashrc', if that file exists.
|
|
This may be inhibited by using the `--norc' option. The `--rcfile
|
|
FILE' option will force Bash to read and execute commands from FILE
|
|
instead of `~/.bashrc'.
|
|
|
|
So, typically, your `~/.bash_profile' contains the line
|
|
`if [ -f ~/.bashrc ]; then . ~/.bashrc; fi'
|
|
after (or before) any login-specific initializations.
|
|
|
|
Invoked non-interactively
|
|
.........................
|
|
|
|
When Bash is started non-interactively, to run a shell script, for
|
|
example, it looks for the variable `BASH_ENV' in the environment,
|
|
expands its value if it appears there, and uses the expanded value as
|
|
the name of a file to read and execute. Bash behaves as if the
|
|
following command were executed:
|
|
`if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi'
|
|
but the value of the `PATH' variable is not used to search for the
|
|
filename.
|
|
|
|
As noted above, if a non-interactive shell is invoked with the
|
|
`--login' option, Bash attempts to read and execute commands from the
|
|
login shell startup files.
|
|
|
|
Invoked with name `sh'
|
|
......................
|
|
|
|
If Bash is invoked with the name `sh', it tries to mimic the startup
|
|
behavior of historical versions of `sh' as closely as possible, while
|
|
conforming to the POSIX standard as well.
|
|
|
|
When invoked as an interactive login shell, or as a non-interactive
|
|
shell with the `--login' option, it first attempts to read and execute
|
|
commands from `/etc/profile' and `~/.profile', in that order. The
|
|
`--noprofile' option may be used to inhibit this behavior. When
|
|
invoked as an interactive shell with the name `sh', Bash looks for the
|
|
variable `ENV', expands its value if it is defined, and uses the
|
|
expanded value as the name of a file to read and execute. Since a
|
|
shell invoked as `sh' does not attempt to read and execute commands
|
|
from any other startup files, the `--rcfile' option has no effect. A
|
|
non-interactive shell invoked with the name `sh' does not attempt to
|
|
read any other startup files.
|
|
|
|
When invoked as `sh', Bash enters POSIX mode after the startup files
|
|
are read.
|
|
|
|
Invoked in POSIX mode
|
|
.....................
|
|
|
|
When Bash is started in POSIX mode, as with the `--posix' command line
|
|
option, it follows the POSIX standard for startup files. In this mode,
|
|
interactive shells expand the `ENV' variable and commands are read and
|
|
executed from the file whose name is the expanded value. No other
|
|
startup files are read.
|
|
|
|
Invoked by remote shell daemon
|
|
..............................
|
|
|
|
Bash attempts to determine when it is being run with its standard input
|
|
connected to a network connection, as when executed by the remote shell
|
|
daemon, usually `rshd', or the secure shell daemon `sshd'. If Bash
|
|
determines it is being run in this fashion, it reads and executes
|
|
commands from `~/.bashrc', if that file exists and is readable. It
|
|
will not do this if invoked as `sh'. The `--norc' option may be used
|
|
to inhibit this behavior, and the `--rcfile' option may be used to
|
|
force another file to be read, but neither `rshd' nor `sshd' generally
|
|
invoke the shell with those options or allow them to be specified.
|
|
|
|
Invoked with unequal effective and real UID/GIDs
|
|
................................................
|
|
|
|
If Bash is started with the effective user (group) id not equal to the
|
|
real user (group) id, and the `-p' option is not supplied, no startup
|
|
files are read, shell functions are not inherited from the environment,
|
|
the `SHELLOPTS', `BASHOPTS', `CDPATH', and `GLOBIGNORE' variables, if
|
|
they appear in the environment, are ignored, and the effective user id
|
|
is set to the real user id. If the `-p' option is supplied at
|
|
invocation, the startup behavior is the same, but the effective user id
|
|
is not reset.
|
|
|
|
|
|
File: bashref.info, Node: Interactive Shells, Next: Bash Conditional Expressions, Prev: Bash Startup Files, Up: Bash Features
|
|
|
|
6.3 Interactive Shells
|
|
======================
|
|
|
|
* Menu:
|
|
|
|
* What is an Interactive Shell?:: What determines whether a shell is Interactive.
|
|
* Is this Shell Interactive?:: How to tell if a shell is interactive.
|
|
* Interactive Shell Behavior:: What changes in a interactive shell?
|
|
|
|
|
|
File: bashref.info, Node: What is an Interactive Shell?, Next: Is this Shell Interactive?, Up: Interactive Shells
|
|
|
|
6.3.1 What is an Interactive Shell?
|
|
-----------------------------------
|
|
|
|
An interactive shell is one started without non-option arguments,
|
|
unless `-s' is specified, without specifying the `-c' option, and whose
|
|
input and error output are both connected to terminals (as determined
|
|
by `isatty(3)'), or one started with the `-i' option.
|
|
|
|
An interactive shell generally reads from and writes to a user's
|
|
terminal.
|
|
|
|
The `-s' invocation option may be used to set the positional
|
|
parameters when an interactive shell is started.
|
|
|
|
|
|
File: bashref.info, Node: Is this Shell Interactive?, Next: Interactive Shell Behavior, Prev: What is an Interactive Shell?, Up: Interactive Shells
|
|
|
|
6.3.2 Is this Shell Interactive?
|
|
--------------------------------
|
|
|
|
To determine within a startup script whether or not Bash is running
|
|
interactively, test the value of the `-' special parameter. It
|
|
contains `i' when the shell is interactive. For example:
|
|
|
|
case "$-" in
|
|
*i*) echo This shell is interactive ;;
|
|
*) echo This shell is not interactive ;;
|
|
esac
|
|
|
|
Alternatively, startup scripts may examine the variable `PS1'; it is
|
|
unset in non-interactive shells, and set in interactive shells. Thus:
|
|
|
|
if [ -z "$PS1" ]; then
|
|
echo This shell is not interactive
|
|
else
|
|
echo This shell is interactive
|
|
fi
|
|
|
|
|
|
File: bashref.info, Node: Interactive Shell Behavior, Prev: Is this Shell Interactive?, Up: Interactive Shells
|
|
|
|
6.3.3 Interactive Shell Behavior
|
|
--------------------------------
|
|
|
|
When the shell is running interactively, it changes its behavior in
|
|
several ways.
|
|
|
|
1. Startup files are read and executed as described in *note Bash
|
|
Startup Files::.
|
|
|
|
2. Job Control (*note Job Control::) is enabled by default. When job
|
|
control is in effect, Bash ignores the keyboard-generated job
|
|
control signals `SIGTTIN', `SIGTTOU', and `SIGTSTP'.
|
|
|
|
3. Bash expands and displays `PS1' before reading the first line of a
|
|
command, and expands and displays `PS2' before reading the second
|
|
and subsequent lines of a multi-line command.
|
|
|
|
4. Bash executes the value of the `PROMPT_COMMAND' variable as a
|
|
command before printing the primary prompt, `$PS1' (*note Bash
|
|
Variables::).
|
|
|
|
5. Readline (*note Command Line Editing::) is used to read commands
|
|
from the user's terminal.
|
|
|
|
6. Bash inspects the value of the `ignoreeof' option to `set -o'
|
|
instead of exiting immediately when it receives an `EOF' on its
|
|
standard input when reading a command (*note The Set Builtin::).
|
|
|
|
7. Command history (*note Bash History Facilities::) and history
|
|
expansion (*note History Interaction::) are enabled by default.
|
|
Bash will save the command history to the file named by `$HISTFILE'
|
|
when a shell with history enabled exits.
|
|
|
|
8. Alias expansion (*note Aliases::) is performed by default.
|
|
|
|
9. In the absence of any traps, Bash ignores `SIGTERM' (*note
|
|
Signals::).
|
|
|
|
10. In the absence of any traps, `SIGINT' is caught and handled
|
|
((*note Signals::). `SIGINT' will interrupt some shell builtins.
|
|
|
|
11. An interactive login shell sends a `SIGHUP' to all jobs on exit if
|
|
the `huponexit' shell option has been enabled (*note Signals::).
|
|
|
|
12. The `-n' invocation option is ignored, and `set -n' has no effect
|
|
(*note The Set Builtin::).
|
|
|
|
13. Bash will check for mail periodically, depending on the values of
|
|
the `MAIL', `MAILPATH', and `MAILCHECK' shell variables (*note
|
|
Bash Variables::).
|
|
|
|
14. Expansion errors due to references to unbound shell variables after
|
|
`set -u' has been enabled will not cause the shell to exit (*note
|
|
The Set Builtin::).
|
|
|
|
15. The shell will not exit on expansion errors caused by VAR being
|
|
unset or null in `${VAR:?WORD}' expansions (*note Shell Parameter
|
|
Expansion::).
|
|
|
|
16. Redirection errors encountered by shell builtins will not cause the
|
|
shell to exit.
|
|
|
|
17. When running in POSIX mode, a special builtin returning an error
|
|
status will not cause the shell to exit (*note Bash POSIX Mode::).
|
|
|
|
18. A failed `exec' will not cause the shell to exit (*note Bourne
|
|
Shell Builtins::).
|
|
|
|
19. Parser syntax errors will not cause the shell to exit.
|
|
|
|
20. Simple spelling correction for directory arguments to the `cd'
|
|
builtin is enabled by default (see the description of the `cdspell'
|
|
option to the `shopt' builtin in *note The Shopt Builtin::).
|
|
|
|
21. The shell will check the value of the `TMOUT' variable and exit if
|
|
a command is not read within the specified number of seconds after
|
|
printing `$PS1' (*note Bash Variables::).
|
|
|
|
|
|
|
|
File: bashref.info, Node: Bash Conditional Expressions, Next: Shell Arithmetic, Prev: Interactive Shells, Up: Bash Features
|
|
|
|
6.4 Bash Conditional Expressions
|
|
================================
|
|
|
|
Conditional expressions are used by the `[[' compound command and the
|
|
`test' and `[' builtin commands.
|
|
|
|
Expressions may be unary or binary. Unary expressions are often
|
|
used to examine the status of a file. There are string operators and
|
|
numeric comparison operators as well. If the FILE argument to one of
|
|
the primaries is of the form `/dev/fd/N', then file descriptor N is
|
|
checked. If the FILE argument to one of the primaries is one of
|
|
`/dev/stdin', `/dev/stdout', or `/dev/stderr', file descriptor 0, 1, or
|
|
2, respectively, is checked.
|
|
|
|
When used with `[[', the `<' and `>' operators sort
|
|
lexicographically using the current locale. The `test' command uses
|
|
ASCII ordering.
|
|
|
|
Unless otherwise specified, primaries that operate on files follow
|
|
symbolic links and operate on the target of the link, rather than the
|
|
link itself.
|
|
|
|
`-a FILE'
|
|
True if FILE exists.
|
|
|
|
`-b FILE'
|
|
True if FILE exists and is a block special file.
|
|
|
|
`-c FILE'
|
|
True if FILE exists and is a character special file.
|
|
|
|
`-d FILE'
|
|
True if FILE exists and is a directory.
|
|
|
|
`-e FILE'
|
|
True if FILE exists.
|
|
|
|
`-f FILE'
|
|
True if FILE exists and is a regular file.
|
|
|
|
`-g FILE'
|
|
True if FILE exists and its set-group-id bit is set.
|
|
|
|
`-h FILE'
|
|
True if FILE exists and is a symbolic link.
|
|
|
|
`-k FILE'
|
|
True if FILE exists and its "sticky" bit is set.
|
|
|
|
`-p FILE'
|
|
True if FILE exists and is a named pipe (FIFO).
|
|
|
|
`-r FILE'
|
|
True if FILE exists and is readable.
|
|
|
|
`-s FILE'
|
|
True if FILE exists and has a size greater than zero.
|
|
|
|
`-t FD'
|
|
True if file descriptor FD is open and refers to a terminal.
|
|
|
|
`-u FILE'
|
|
True if FILE exists and its set-user-id bit is set.
|
|
|
|
`-w FILE'
|
|
True if FILE exists and is writable.
|
|
|
|
`-x FILE'
|
|
True if FILE exists and is executable.
|
|
|
|
`-G FILE'
|
|
True if FILE exists and is owned by the effective group id.
|
|
|
|
`-L FILE'
|
|
True if FILE exists and is a symbolic link.
|
|
|
|
`-N FILE'
|
|
True if FILE exists and has been modified since it was last read.
|
|
|
|
`-O FILE'
|
|
True if FILE exists and is owned by the effective user id.
|
|
|
|
`-S FILE'
|
|
True if FILE exists and is a socket.
|
|
|
|
`FILE1 -ef FILE2'
|
|
True if FILE1 and FILE2 refer to the same device and inode numbers.
|
|
|
|
`FILE1 -nt FILE2'
|
|
True if FILE1 is newer (according to modification date) than
|
|
FILE2, or if FILE1 exists and FILE2 does not.
|
|
|
|
`FILE1 -ot FILE2'
|
|
True if FILE1 is older than FILE2, or if FILE2 exists and FILE1
|
|
does not.
|
|
|
|
`-o OPTNAME'
|
|
True if the shell option OPTNAME is enabled. The list of options
|
|
appears in the description of the `-o' option to the `set' builtin
|
|
(*note The Set Builtin::).
|
|
|
|
`-v VARNAME'
|
|
True if the shell variable VARNAME is set (has been assigned a
|
|
value).
|
|
|
|
`-R VARNAME'
|
|
True if the shell variable VARNAME is set and is a name reference.
|
|
|
|
`-z STRING'
|
|
True if the length of STRING is zero.
|
|
|
|
`-n STRING'
|
|
`STRING'
|
|
True if the length of STRING is non-zero.
|
|
|
|
`STRING1 == STRING2'
|
|
`STRING1 = STRING2'
|
|
True if the strings are equal. When used with the `[[' command,
|
|
this performs pattern matching as described above (*note
|
|
Conditional Constructs::).
|
|
|
|
`=' should be used with the `test' command for POSIX conformance.
|
|
|
|
`STRING1 != STRING2'
|
|
True if the strings are not equal.
|
|
|
|
`STRING1 < STRING2'
|
|
True if STRING1 sorts before STRING2 lexicographically.
|
|
|
|
`STRING1 > STRING2'
|
|
True if STRING1 sorts after STRING2 lexicographically.
|
|
|
|
`ARG1 OP ARG2'
|
|
`OP' is one of `-eq', `-ne', `-lt', `-le', `-gt', or `-ge'. These
|
|
arithmetic binary operators return true if ARG1 is equal to, not
|
|
equal to, less than, less than or equal to, greater than, or
|
|
greater than or equal to ARG2, respectively. ARG1 and ARG2 may be
|
|
positive or negative integers.
|
|
|
|
|
|
File: bashref.info, Node: Shell Arithmetic, Next: Aliases, Prev: Bash Conditional Expressions, Up: Bash Features
|
|
|
|
6.5 Shell Arithmetic
|
|
====================
|
|
|
|
The shell allows arithmetic expressions to be evaluated, as one of the
|
|
shell expansions or by the `let' and the `-i' option to the `declare'
|
|
builtins.
|
|
|
|
Evaluation is done in fixed-width integers with no check for
|
|
overflow, though division by 0 is trapped and flagged as an error. The
|
|
operators and their precedence, associativity, and values are the same
|
|
as in the C language. The following list of operators is grouped into
|
|
levels of equal-precedence operators. The levels are listed in order
|
|
of decreasing precedence.
|
|
|
|
`ID++ ID--'
|
|
variable post-increment and post-decrement
|
|
|
|
`++ID --ID'
|
|
variable pre-increment and pre-decrement
|
|
|
|
`- +'
|
|
unary minus and plus
|
|
|
|
`! ~'
|
|
logical and bitwise negation
|
|
|
|
`**'
|
|
exponentiation
|
|
|
|
`* / %'
|
|
multiplication, division, remainder
|
|
|
|
`+ -'
|
|
addition, subtraction
|
|
|
|
`<< >>'
|
|
left and right bitwise shifts
|
|
|
|
`<= >= < >'
|
|
comparison
|
|
|
|
`== !='
|
|
equality and inequality
|
|
|
|
`&'
|
|
bitwise AND
|
|
|
|
`^'
|
|
bitwise exclusive OR
|
|
|
|
`|'
|
|
bitwise OR
|
|
|
|
`&&'
|
|
logical AND
|
|
|
|
`||'
|
|
logical OR
|
|
|
|
`expr ? expr : expr'
|
|
conditional operator
|
|
|
|
`= *= /= %= += -= <<= >>= &= ^= |='
|
|
assignment
|
|
|
|
`expr1 , expr2'
|
|
comma
|
|
|
|
Shell variables are allowed as operands; parameter expansion is
|
|
performed before the expression is evaluated. Within an expression,
|
|
shell variables may also be referenced by name without using the
|
|
parameter expansion syntax. A shell variable that is null or unset
|
|
evaluates to 0 when referenced by name without using the parameter
|
|
expansion syntax. The value of a variable is evaluated as an
|
|
arithmetic expression when it is referenced, or when a variable which
|
|
has been given the INTEGER attribute using `declare -i' is assigned a
|
|
value. A null value evaluates to 0. A shell variable need not have
|
|
its INTEGER attribute turned on to be used in an expression.
|
|
|
|
Constants with a leading 0 are interpreted as octal numbers. A
|
|
leading `0x' or `0X' denotes hexadecimal. Otherwise, numbers take the
|
|
form [BASE`#']N, where the optional BASE is a decimal number between 2
|
|
and 64 representing the arithmetic base, and N is a number in that base.
|
|
If BASE`#' is omitted, then base 10 is used. When specifying N, he
|
|
digits greater than 9 are represented by the lowercase letters, the
|
|
uppercase letters, `@', and `_', in that order. If BASE is less than
|
|
or equal to 36, lowercase and uppercase letters may be used
|
|
interchangeably to represent numbers between 10 and 35.
|
|
|
|
Operators are evaluated in order of precedence. Sub-expressions in
|
|
parentheses are evaluated first and may override the precedence rules
|
|
above.
|
|
|
|
|
|
File: bashref.info, Node: Aliases, Next: Arrays, Prev: Shell Arithmetic, Up: Bash Features
|
|
|
|
6.6 Aliases
|
|
===========
|
|
|
|
ALIASES allow a string to be substituted for a word when it is used as
|
|
the first word of a simple command. The shell maintains a list of
|
|
aliases that may be set and unset with the `alias' and `unalias'
|
|
builtin commands.
|
|
|
|
The first word of each simple command, if unquoted, is checked to see
|
|
if it has an alias. If so, that word is replaced by the text of the
|
|
alias. The characters `/', `$', ``', `=' and any of the shell
|
|
metacharacters or quoting characters listed above may not appear in an
|
|
alias name. The replacement text may contain any valid shell input,
|
|
including shell metacharacters. The first word of the replacement text
|
|
is tested for aliases, but a word that is identical to an alias being
|
|
expanded is not expanded a second time. This means that one may alias
|
|
`ls' to `"ls -F"', for instance, and Bash does not try to recursively
|
|
expand the replacement text. If the last character of the alias value
|
|
is a BLANK, then the next command word following the alias is also
|
|
checked for alias expansion.
|
|
|
|
Aliases are created and listed with the `alias' command, and removed
|
|
with the `unalias' command.
|
|
|
|
There is no mechanism for using arguments in the replacement text,
|
|
as in `csh'. If arguments are needed, a shell function should be used
|
|
(*note Shell Functions::).
|
|
|
|
Aliases are not expanded when the shell is not interactive, unless
|
|
the `expand_aliases' shell option is set using `shopt' (*note The Shopt
|
|
Builtin::).
|
|
|
|
The rules concerning the definition and use of aliases are somewhat
|
|
confusing. Bash always reads at least one complete line of input
|
|
before executing any of the commands on that line. Aliases are
|
|
expanded when a command is read, not when it is executed. Therefore, an
|
|
alias definition appearing on the same line as another command does not
|
|
take effect until the next line of input is read. The commands
|
|
following the alias definition on that line are not affected by the new
|
|
alias. This behavior is also an issue when functions are executed.
|
|
Aliases are expanded when a function definition is read, not when the
|
|
function is executed, because a function definition is itself a
|
|
compound command. As a consequence, aliases defined in a function are
|
|
not available until after that function is executed. To be safe,
|
|
always put alias definitions on a separate line, and do not use `alias'
|
|
in compound commands.
|
|
|
|
For almost every purpose, shell functions are preferred over aliases.
|
|
|
|
|
|
File: bashref.info, Node: Arrays, Next: The Directory Stack, Prev: Aliases, Up: Bash Features
|
|
|
|
6.7 Arrays
|
|
==========
|
|
|
|
Bash provides one-dimensional indexed and associative array variables.
|
|
Any variable may be used as an indexed array; the `declare' builtin
|
|
will explicitly declare an array. There is no maximum limit on the
|
|
size of an array, nor any requirement that members be indexed or
|
|
assigned contiguously. Indexed arrays are referenced using integers
|
|
(including arithmetic expressions (*note Shell Arithmetic::)) and are
|
|
zero-based; associative arrays use arbitrary strings. Unless otherwise
|
|
noted, indexed array indices must be non-negative integers.
|
|
|
|
An indexed array is created automatically if any variable is
|
|
assigned to using the syntax
|
|
NAME[SUBSCRIPT]=VALUE
|
|
|
|
The SUBSCRIPT is treated as an arithmetic expression that must evaluate
|
|
to a number. To explicitly declare an array, use
|
|
declare -a NAME
|
|
The syntax
|
|
declare -a NAME[SUBSCRIPT]
|
|
is also accepted; the SUBSCRIPT is ignored.
|
|
|
|
Associative arrays are created using
|
|
declare -A NAME.
|
|
|
|
Attributes may be specified for an array variable using the
|
|
`declare' and `readonly' builtins. Each attribute applies to all
|
|
members of an array.
|
|
|
|
Arrays are assigned to using compound assignments of the form
|
|
NAME=(VALUE1 VALUE2 ... )
|
|
where each VALUE is of the form `[SUBSCRIPT]='STRING. Indexed array
|
|
assignments do not require anything but STRING. When assigning to
|
|
indexed arrays, if the optional subscript is supplied, that index is
|
|
assigned to; otherwise the index of the element assigned is the last
|
|
index assigned to by the statement plus one. Indexing starts at zero.
|
|
|
|
When assigning to an associative array, the subscript is required.
|
|
|
|
This syntax is also accepted by the `declare' builtin. Individual
|
|
array elements may be assigned to using the `NAME[SUBSCRIPT]=VALUE'
|
|
syntax introduced above.
|
|
|
|
When assigning to an indexed array, if NAME is subscripted by a
|
|
negative number, that number is interpreted as relative to one greater
|
|
than the maximum index of NAME, so negative indices count back from the
|
|
end of the array, and an index of -1 references the last element.
|
|
|
|
Any element of an array may be referenced using `${NAME[SUBSCRIPT]}'.
|
|
The braces are required to avoid conflicts with the shell's filename
|
|
expansion operators. If the SUBSCRIPT is `@' or `*', the word expands
|
|
to all members of the array NAME. These subscripts differ only when
|
|
the word appears within double quotes. If the word is double-quoted,
|
|
`${NAME[*]}' expands to a single word with the value of each array
|
|
member separated by the first character of the `IFS' variable, and
|
|
`${NAME[@]}' expands each element of NAME to a separate word. When
|
|
there are no array members, `${NAME[@]}' expands to nothing. If the
|
|
double-quoted expansion occurs within a word, the expansion of the
|
|
first parameter is joined with the beginning part of the original word,
|
|
and the expansion of the last parameter is joined with the last part of
|
|
the original word. This is analogous to the expansion of the special
|
|
parameters `@' and `*'. `${#NAME[SUBSCRIPT]}' expands to the length of
|
|
`${NAME[SUBSCRIPT]}'. If SUBSCRIPT is `@' or `*', the expansion is the
|
|
number of elements in the array. Referencing an array variable without
|
|
a subscript is equivalent to referencing with a subscript of 0. If the
|
|
SUBSCRIPT used to reference an element of an indexed array evaluates to
|
|
a number less than zero, it is interpreted as relative to one greater
|
|
than the maximum index of the array, so negative indices count back
|
|
from the end of the array, and an index of -1 refers to the last
|
|
element.
|
|
|
|
An array variable is considered set if a subscript has been assigned
|
|
a value. The null string is a valid value.
|
|
|
|
It is possible to obtain the keys (indices) of an array as well as
|
|
the values. ${!NAME[@]} and ${!NAME[*]} expand to the indices assigned
|
|
in array variable NAME. The treatment when in double quotes is similar
|
|
to the expansion of the special parameters `@' and `*' within double
|
|
quotes.
|
|
|
|
The `unset' builtin is used to destroy arrays. `unset
|
|
NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT.
|
|
Negative subscripts to indexed arrays are interpreted as described
|
|
above. Care must be taken to avoid unwanted side effects caused by
|
|
filename expansion. `unset NAME', where NAME is an array, removes the
|
|
entire array. A subscript of `*' or `@' also removes the entire array.
|
|
|
|
The `declare', `local', and `readonly' builtins each accept a `-a'
|
|
option to specify an indexed array and a `-A' option to specify an
|
|
associative array. If both options are supplied, `-A' takes precedence.
|
|
The `read' builtin accepts a `-a' option to assign a list of words read
|
|
from the standard input to an array, and can read values from the
|
|
standard input into individual array elements. The `set' and `declare'
|
|
builtins display array values in a way that allows them to be reused as
|
|
input.
|
|
|
|
|
|
File: bashref.info, Node: The Directory Stack, Next: Controlling the Prompt, Prev: Arrays, Up: Bash Features
|
|
|
|
6.8 The Directory Stack
|
|
=======================
|
|
|
|
* Menu:
|
|
|
|
* Directory Stack Builtins:: Bash builtin commands to manipulate
|
|
the directory stack.
|
|
|
|
The directory stack is a list of recently-visited directories. The
|
|
`pushd' builtin adds directories to the stack as it changes the current
|
|
directory, and the `popd' builtin removes specified directories from
|
|
the stack and changes the current directory to the directory removed.
|
|
The `dirs' builtin displays the contents of the directory stack.
|
|
|
|
The contents of the directory stack are also visible as the value of
|
|
the `DIRSTACK' shell variable.
|
|
|
|
|
|
File: bashref.info, Node: Directory Stack Builtins, Up: The Directory Stack
|
|
|
|
6.8.1 Directory Stack Builtins
|
|
------------------------------
|
|
|
|
`dirs'
|
|
dirs [-clpv] [+N | -N]
|
|
|
|
Display the list of currently remembered directories. Directories
|
|
are added to the list with the `pushd' command; the `popd' command
|
|
removes directories from the list.
|
|
|
|
`-c'
|
|
Clears the directory stack by deleting all of the elements.
|
|
|
|
`-l'
|
|
Produces a listing using full pathnames; the default listing
|
|
format uses a tilde to denote the home directory.
|
|
|
|
`-p'
|
|
Causes `dirs' to print the directory stack with one entry per
|
|
line.
|
|
|
|
`-v'
|
|
Causes `dirs' to print the directory stack with one entry per
|
|
line, prefixing each entry with its index in the stack.
|
|
|
|
`+N'
|
|
Displays the Nth directory (counting from the left of the
|
|
list printed by `dirs' when invoked without options), starting
|
|
with zero.
|
|
|
|
`-N'
|
|
Displays the Nth directory (counting from the right of the
|
|
list printed by `dirs' when invoked without options), starting
|
|
with zero.
|
|
|
|
`popd'
|
|
popd [-n] [+N | -N]
|
|
|
|
Remove the top entry from the directory stack, and `cd' to the new
|
|
top directory. When no arguments are given, `popd' removes the
|
|
top directory from the stack and performs a `cd' to the new top
|
|
directory. The elements are numbered from 0 starting at the first
|
|
directory listed with `dirs'; that is, `popd' is equivalent to
|
|
`popd +0'.
|
|
|
|
`-n'
|
|
Suppresses the normal change of directory when removing
|
|
directories from the stack, so that only the stack is
|
|
manipulated.
|
|
|
|
`+N'
|
|
Removes the Nth directory (counting from the left of the list
|
|
printed by `dirs'), starting with zero.
|
|
|
|
`-N'
|
|
Removes the Nth directory (counting from the right of the
|
|
list printed by `dirs'), starting with zero.
|
|
|
|
`pushd'
|
|
pushd [-n] [+N | -N | DIR]
|
|
|
|
Save the current directory on the top of the directory stack and
|
|
then `cd' to DIR. With no arguments, `pushd' exchanges the top
|
|
two directories.
|
|
|
|
`-n'
|
|
Suppresses the normal change of directory when adding
|
|
directories to the stack, so that only the stack is
|
|
manipulated.
|
|
|
|
`+N'
|
|
Brings the Nth directory (counting from the left of the list
|
|
printed by `dirs', starting with zero) to the top of the list
|
|
by rotating the stack.
|
|
|
|
`-N'
|
|
Brings the Nth directory (counting from the right of the list
|
|
printed by `dirs', starting with zero) to the top of the list
|
|
by rotating the stack.
|
|
|
|
`DIR'
|
|
Makes the current working directory be the top of the stack,
|
|
making it the new current directory as if it had been
|
|
supplied as an argument to the `cd' builtin.
|
|
|
|
|
|
File: bashref.info, Node: Controlling the Prompt, Next: The Restricted Shell, Prev: The Directory Stack, Up: Bash Features
|
|
|
|
6.9 Controlling the Prompt
|
|
==========================
|
|
|
|
The value of the variable `PROMPT_COMMAND' is examined just before Bash
|
|
prints each primary prompt. If `PROMPT_COMMAND' is set and has a
|
|
non-null value, then the value is executed just as if it had been typed
|
|
on the command line.
|
|
|
|
In addition, the following table describes the special characters
|
|
which can appear in the prompt variables `PS1' to `PS4':
|
|
|
|
`\a'
|
|
A bell character.
|
|
|
|
`\d'
|
|
The date, in "Weekday Month Date" format (e.g., "Tue May 26").
|
|
|
|
`\D{FORMAT}'
|
|
The FORMAT is passed to `strftime'(3) and the result is inserted
|
|
into the prompt string; an empty FORMAT results in a
|
|
locale-specific time representation. The braces are required.
|
|
|
|
`\e'
|
|
An escape character.
|
|
|
|
`\h'
|
|
The hostname, up to the first `.'.
|
|
|
|
`\H'
|
|
The hostname.
|
|
|
|
`\j'
|
|
The number of jobs currently managed by the shell.
|
|
|
|
`\l'
|
|
The basename of the shell's terminal device name.
|
|
|
|
`\n'
|
|
A newline.
|
|
|
|
`\r'
|
|
A carriage return.
|
|
|
|
`\s'
|
|
The name of the shell, the basename of `$0' (the portion following
|
|
the final slash).
|
|
|
|
`\t'
|
|
The time, in 24-hour HH:MM:SS format.
|
|
|
|
`\T'
|
|
The time, in 12-hour HH:MM:SS format.
|
|
|
|
`\@'
|
|
The time, in 12-hour am/pm format.
|
|
|
|
`\A'
|
|
The time, in 24-hour HH:MM format.
|
|
|
|
`\u'
|
|
The username of the current user.
|
|
|
|
`\v'
|
|
The version of Bash (e.g., 2.00)
|
|
|
|
`\V'
|
|
The release of Bash, version + patchlevel (e.g., 2.00.0)
|
|
|
|
`\w'
|
|
The current working directory, with `$HOME' abbreviated with a
|
|
tilde (uses the `$PROMPT_DIRTRIM' variable).
|
|
|
|
`\W'
|
|
The basename of `$PWD', with `$HOME' abbreviated with a tilde.
|
|
|
|
`\!'
|
|
The history number of this command.
|
|
|
|
`\#'
|
|
The command number of this command.
|
|
|
|
`\$'
|
|
If the effective uid is 0, `#', otherwise `$'.
|
|
|
|
`\NNN'
|
|
The character whose ASCII code is the octal value NNN.
|
|
|
|
`\\'
|
|
A backslash.
|
|
|
|
`\['
|
|
Begin a sequence of non-printing characters. This could be used to
|
|
embed a terminal control sequence into the prompt.
|
|
|
|
`\]'
|
|
End a sequence of non-printing characters.
|
|
|
|
The command number and the history number are usually different: the
|
|
history number of a command is its position in the history list, which
|
|
may include commands restored from the history file (*note Bash History
|
|
Facilities::), while the command number is the position in the sequence
|
|
of commands executed during the current shell session.
|
|
|
|
After the string is decoded, it is expanded via parameter expansion,
|
|
command substitution, arithmetic expansion, and quote removal, subject
|
|
to the value of the `promptvars' shell option (*note Bash Builtins::).
|
|
|
|
|
|
File: bashref.info, Node: The Restricted Shell, Next: Bash POSIX Mode, Prev: Controlling the Prompt, Up: Bash Features
|
|
|
|
6.10 The Restricted Shell
|
|
=========================
|
|
|
|
If Bash is started with the name `rbash', or the `--restricted' or `-r'
|
|
option is supplied at invocation, the shell becomes restricted. A
|
|
restricted shell is used to set up an environment more controlled than
|
|
the standard shell. A restricted shell behaves identically to `bash'
|
|
with the exception that the following are disallowed or not performed:
|
|
|
|
* Changing directories with the `cd' builtin.
|
|
|
|
* Setting or unsetting the values of the `SHELL', `PATH', `ENV', or
|
|
`BASH_ENV' variables.
|
|
|
|
* Specifying command names containing slashes.
|
|
|
|
* Specifying a filename containing a slash as an argument to the `.'
|
|
builtin command.
|
|
|
|
* Specifying a filename containing a slash as an argument to the `-p'
|
|
option to the `hash' builtin command.
|
|
|
|
* Importing function definitions from the shell environment at
|
|
startup.
|
|
|
|
* Parsing the value of `SHELLOPTS' from the shell environment at
|
|
startup.
|
|
|
|
* Redirecting output using the `>', `>|', `<>', `>&', `&>', and `>>'
|
|
redirection operators.
|
|
|
|
* Using the `exec' builtin to replace the shell with another command.
|
|
|
|
* Adding or deleting builtin commands with the `-f' and `-d' options
|
|
to the `enable' builtin.
|
|
|
|
* Using the `enable' builtin command to enable disabled shell
|
|
builtins.
|
|
|
|
* Specifying the `-p' option to the `command' builtin.
|
|
|
|
* Turning off restricted mode with `set +r' or `set +o restricted'.
|
|
|
|
These restrictions are enforced after any startup files are read.
|
|
|
|
When a command that is found to be a shell script is executed (*note
|
|
Shell Scripts::), `rbash' turns off any restrictions in the shell
|
|
spawned to execute the script.
|
|
|
|
|
|
File: bashref.info, Node: Bash POSIX Mode, Prev: The Restricted Shell, Up: Bash Features
|
|
|
|
6.11 Bash POSIX Mode
|
|
====================
|
|
|
|
Starting Bash with the `--posix' command-line option or executing `set
|
|
-o posix' while Bash is running will cause Bash to conform more closely
|
|
to the POSIX standard by changing the behavior to match that specified
|
|
by POSIX in areas where the Bash default differs.
|
|
|
|
When invoked as `sh', Bash enters POSIX mode after reading the
|
|
startup files.
|
|
|
|
The following list is what's changed when `POSIX mode' is in effect:
|
|
|
|
1. When a command in the hash table no longer exists, Bash will
|
|
re-search `$PATH' to find the new location. This is also
|
|
available with `shopt -s checkhash'.
|
|
|
|
2. The message printed by the job control code and builtins when a job
|
|
exits with a non-zero status is `Done(status)'.
|
|
|
|
3. The message printed by the job control code and builtins when a job
|
|
is stopped is `Stopped(SIGNAME)', where SIGNAME is, for example,
|
|
`SIGTSTP'.
|
|
|
|
4. The `bg' builtin uses the required format to describe each job
|
|
placed in the background, which does not include an indication of
|
|
whether the job is the current or previous job.
|
|
|
|
5. Reserved words appearing in a context where reserved words are
|
|
recognized do not undergo alias expansion.
|
|
|
|
6. The POSIX `PS1' and `PS2' expansions of `!' to the history number
|
|
and `!!' to `!' are enabled, and parameter expansion is performed
|
|
on the values of `PS1' and `PS2' regardless of the setting of the
|
|
`promptvars' option.
|
|
|
|
7. The POSIX startup files are executed (`$ENV') rather than the
|
|
normal Bash files.
|
|
|
|
8. Tilde expansion is only performed on assignments preceding a
|
|
command name, rather than on all assignment statements on the line.
|
|
|
|
9. The `command' builtin does not prevent builtins that take
|
|
assignment statements as arguments from expanding them as
|
|
assignment statements; when not in POSIX mode, assignment builtins
|
|
lose their assignment statement expansion properties when preceded
|
|
by `command'.
|
|
|
|
10. The default history file is `~/.sh_history' (this is the default
|
|
value of `$HISTFILE').
|
|
|
|
11. The output of `kill -l' prints all the signal names on a single
|
|
line, separated by spaces, without the `SIG' prefix.
|
|
|
|
12. The `kill' builtin does not accept signal names with a `SIG'
|
|
prefix.
|
|
|
|
13. Non-interactive shells exit if FILENAME in `.' FILENAME is not
|
|
found.
|
|
|
|
14. Non-interactive shells exit if a syntax error in an arithmetic
|
|
expansion results in an invalid expression.
|
|
|
|
15. Non-interactive shells exit if there is a syntax error in a script
|
|
read with the `.' or `source' builtins, or in a string processed by
|
|
the `eval' builtin.
|
|
|
|
16. Redirection operators do not perform filename expansion on the word
|
|
in the redirection unless the shell is interactive.
|
|
|
|
17. Redirection operators do not perform word splitting on the word in
|
|
the redirection.
|
|
|
|
18. Function names must be valid shell `name's. That is, they may not
|
|
contain characters other than letters, digits, and underscores, and
|
|
may not start with a digit. Declaring a function with an invalid
|
|
name causes a fatal syntax error in non-interactive shells.
|
|
|
|
19. Function names may not be the same as one of the POSIX special
|
|
builtins.
|
|
|
|
20. POSIX special builtins are found before shell functions during
|
|
command lookup.
|
|
|
|
21. The `time' reserved word may be used by itself as a command. When
|
|
used in this way, it displays timing statistics for the shell and
|
|
its completed children. The `TIMEFORMAT' variable controls the
|
|
format of the timing information.
|
|
|
|
22. When parsing and expanding a ${...} expansion that appears within
|
|
double quotes, single quotes are no longer special and cannot be
|
|
used to quote a closing brace or other special character, unless
|
|
the operator is one of those defined to perform pattern removal.
|
|
In this case, they do not have to appear as matched pairs.
|
|
|
|
23. The parser does not recognize `time' as a reserved word if the next
|
|
token begins with a `-'.
|
|
|
|
24. If a POSIX special builtin returns an error status, a
|
|
non-interactive shell exits. The fatal errors are those listed in
|
|
the POSIX standard, and include things like passing incorrect
|
|
options, redirection errors, variable assignment errors for
|
|
assignments preceding the command name, and so on.
|
|
|
|
25. A non-interactive shell exits with an error status if a variable
|
|
assignment error occurs when no command name follows the assignment
|
|
statements. A variable assignment error occurs, for example, when
|
|
trying to assign a value to a readonly variable.
|
|
|
|
26. A non-interactive shell exists with an error status if a variable
|
|
assignment error occurs in an assignment statement preceding a
|
|
special builtin, but not with any other simple command.
|
|
|
|
27. A non-interactive shell exits with an error status if the iteration
|
|
variable in a `for' statement or the selection variable in a
|
|
`select' statement is a readonly variable.
|
|
|
|
28. Process substitution is not available.
|
|
|
|
29. While variable indirection is available, it may not be applied to
|
|
the `#' and `?' special parameters.
|
|
|
|
30. Assignment statements preceding POSIX special builtins persist in
|
|
the shell environment after the builtin completes.
|
|
|
|
31. Assignment statements preceding shell function calls persist in the
|
|
shell environment after the function returns, as if a POSIX
|
|
special builtin command had been executed.
|
|
|
|
32. The `export' and `readonly' builtin commands display their output
|
|
in the format required by POSIX.
|
|
|
|
33. The `trap' builtin displays signal names without the leading `SIG'.
|
|
|
|
34. The `trap' builtin doesn't check the first argument for a possible
|
|
signal specification and revert the signal handling to the original
|
|
disposition if it is, unless that argument consists solely of
|
|
digits and is a valid signal number. If users want to reset the
|
|
handler for a given signal to the original disposition, they
|
|
should use `-' as the first argument.
|
|
|
|
35. The `.' and `source' builtins do not search the current directory
|
|
for the filename argument if it is not found by searching `PATH'.
|
|
|
|
36. Subshells spawned to execute command substitutions inherit the
|
|
value of the `-e' option from the parent shell. When not in POSIX
|
|
mode, Bash clears the `-e' option in such subshells.
|
|
|
|
37. Alias expansion is always enabled, even in non-interactive shells.
|
|
|
|
38. When the `alias' builtin displays alias definitions, it does not
|
|
display them with a leading `alias ' unless the `-p' option is
|
|
supplied.
|
|
|
|
39. When the `set' builtin is invoked without options, it does not
|
|
display shell function names and definitions.
|
|
|
|
40. When the `set' builtin is invoked without options, it displays
|
|
variable values without quotes, unless they contain shell
|
|
metacharacters, even if the result contains nonprinting characters.
|
|
|
|
41. When the `cd' builtin is invoked in LOGICAL mode, and the pathname
|
|
constructed from `$PWD' and the directory name supplied as an
|
|
argument does not refer to an existing directory, `cd' will fail
|
|
instead of falling back to PHYSICAL mode.
|
|
|
|
42. The `pwd' builtin verifies that the value it prints is the same as
|
|
the current directory, even if it is not asked to check the file
|
|
system with the `-P' option.
|
|
|
|
43. When listing the history, the `fc' builtin does not include an
|
|
indication of whether or not a history entry has been modified.
|
|
|
|
44. The default editor used by `fc' is `ed'.
|
|
|
|
45. The `type' and `command' builtins will not report a non-executable
|
|
file as having been found, though the shell will attempt to
|
|
execute such a file if it is the only so-named file found in
|
|
`$PATH'.
|
|
|
|
46. The `vi' editing mode will invoke the `vi' editor directly when
|
|
the `v' command is run, instead of checking `$VISUAL' and
|
|
`$EDITOR'.
|
|
|
|
47. When the `xpg_echo' option is enabled, Bash does not attempt to
|
|
interpret any arguments to `echo' as options. Each argument is
|
|
displayed, after escape characters are converted.
|
|
|
|
48. The `ulimit' builtin uses a block size of 512 bytes for the `-c'
|
|
and `-f' options.
|
|
|
|
49. The arrival of `SIGCHLD' when a trap is set on `SIGCHLD' does not
|
|
interrupt the `wait' builtin and cause it to return immediately.
|
|
The trap command is run once for each child that exits.
|
|
|
|
50. The `read' builtin may be interrupted by a signal for which a trap
|
|
has been set. If Bash receives a trapped signal while executing
|
|
`read', the trap handler executes and `read' returns an exit
|
|
status greater than 128.
|
|
|
|
|
|
There is other POSIX behavior that Bash does not implement by
|
|
default even when in POSIX mode. Specifically:
|
|
|
|
1. The `fc' builtin checks `$EDITOR' as a program to edit history
|
|
entries if `FCEDIT' is unset, rather than defaulting directly to
|
|
`ed'. `fc' uses `ed' if `EDITOR' is unset.
|
|
|
|
2. As noted above, Bash requires the `xpg_echo' option to be enabled
|
|
for the `echo' builtin to be fully conformant.
|
|
|
|
|
|
Bash can be configured to be POSIX-conformant by default, by
|
|
specifying the `--enable-strict-posix-default' to `configure' when
|
|
building (*note Optional Features::).
|
|
|
|
|
|
File: bashref.info, Node: Job Control, Next: Command Line Editing, Prev: Bash Features, Up: Top
|
|
|
|
7 Job Control
|
|
*************
|
|
|
|
This chapter discusses what job control is, how it works, and how Bash
|
|
allows you to access its facilities.
|
|
|
|
* Menu:
|
|
|
|
* Job Control Basics:: How job control works.
|
|
* Job Control Builtins:: Bash builtin commands used to interact
|
|
with job control.
|
|
* Job Control Variables:: Variables Bash uses to customize job
|
|
control.
|
|
|
|
|
|
File: bashref.info, Node: Job Control Basics, Next: Job Control Builtins, Up: Job Control
|
|
|
|
7.1 Job Control Basics
|
|
======================
|
|
|
|
Job control refers to the ability to selectively stop (suspend) the
|
|
execution of processes and continue (resume) their execution at a later
|
|
point. A user typically employs this facility via an interactive
|
|
interface supplied jointly by the operating system kernel's terminal
|
|
driver and Bash.
|
|
|
|
The shell associates a JOB with each pipeline. It keeps a table of
|
|
currently executing jobs, which may be listed with the `jobs' command.
|
|
When Bash starts a job asynchronously, it prints a line that looks like:
|
|
[1] 25647
|
|
indicating that this job is job number 1 and that the process ID of
|
|
the last process in the pipeline associated with this job is 25647.
|
|
All of the processes in a single pipeline are members of the same job.
|
|
Bash uses the JOB abstraction as the basis for job control.
|
|
|
|
To facilitate the implementation of the user interface to job
|
|
control, the operating system maintains the notion of a current terminal
|
|
process group ID. Members of this process group (processes whose
|
|
process group ID is equal to the current terminal process group ID)
|
|
receive keyboard-generated signals such as `SIGINT'. These processes
|
|
are said to be in the foreground. Background processes are those whose
|
|
process group ID differs from the terminal's; such processes are immune
|
|
to keyboard-generated signals. Only foreground processes are allowed
|
|
to read from or, if the user so specifies with `stty tostop', write to
|
|
the terminal. Background processes which attempt to read from (write
|
|
to when `stty tostop' is in effect) the terminal are sent a `SIGTTIN'
|
|
(`SIGTTOU') signal by the kernel's terminal driver, which, unless
|
|
caught, suspends the process.
|
|
|
|
If the operating system on which Bash is running supports job
|
|
control, Bash contains facilities to use it. Typing the SUSPEND
|
|
character (typically `^Z', Control-Z) while a process is running causes
|
|
that process to be stopped and returns control to Bash. Typing the
|
|
DELAYED SUSPEND character (typically `^Y', Control-Y) causes the
|
|
process to be stopped when it attempts to read input from the terminal,
|
|
and control to be returned to Bash. The user then manipulates the
|
|
state of this job, using the `bg' command to continue it in the
|
|
background, the `fg' command to continue it in the foreground, or the
|
|
`kill' command to kill it. A `^Z' takes effect immediately, and has
|
|
the additional side effect of causing pending output and typeahead to
|
|
be discarded.
|
|
|
|
There are a number of ways to refer to a job in the shell. The
|
|
character `%' introduces a job specification (JOBSPEC).
|
|
|
|
Job number `n' may be referred to as `%n'. The symbols `%%' and
|
|
`%+' refer to the shell's notion of the current job, which is the last
|
|
job stopped while it was in the foreground or started in the background.
|
|
A single `%' (with no accompanying job specification) also refers to
|
|
the current job. The previous job may be referenced using `%-'. If
|
|
there is only a single job, `%+' and `%-' can both be used to refer to
|
|
that job. In output pertaining to jobs (e.g., the output of the `jobs'
|
|
command), the current job is always flagged with a `+', and the
|
|
previous job with a `-'.
|
|
|
|
A job may also be referred to using a prefix of the name used to
|
|
start it, or using a substring that appears in its command line. For
|
|
example, `%ce' refers to a stopped `ce' job. Using `%?ce', on the
|
|
other hand, refers to any job containing the string `ce' in its command
|
|
line. If the prefix or substring matches more than one job, Bash
|
|
reports an error.
|
|
|
|
Simply naming a job can be used to bring it into the foreground:
|
|
`%1' is a synonym for `fg %1', bringing job 1 from the background into
|
|
the foreground. Similarly, `%1 &' resumes job 1 in the background,
|
|
equivalent to `bg %1'
|
|
|
|
The shell learns immediately whenever a job changes state.
|
|
Normally, Bash waits until it is about to print a prompt before
|
|
reporting changes in a job's status so as to not interrupt any other
|
|
output. If the `-b' option to the `set' builtin is enabled, Bash
|
|
reports such changes immediately (*note The Set Builtin::). Any trap
|
|
on `SIGCHLD' is executed for each child process that exits.
|
|
|
|
If an attempt to exit Bash is made while jobs are stopped, (or
|
|
running, if the `checkjobs' option is enabled - see *note The Shopt
|
|
Builtin::), the shell prints a warning message, and if the `checkjobs'
|
|
option is enabled, lists the jobs and their statuses. The `jobs'
|
|
command may then be used to inspect their status. If a second attempt
|
|
to exit is made without an intervening command, Bash does not print
|
|
another warning, and any stopped jobs are terminated.
|
|
|
|
|
|
File: bashref.info, Node: Job Control Builtins, Next: Job Control Variables, Prev: Job Control Basics, Up: Job Control
|
|
|
|
7.2 Job Control Builtins
|
|
========================
|
|
|
|
`bg'
|
|
bg [JOBSPEC ...]
|
|
|
|
Resume each suspended job JOBSPEC in the background, as if it had
|
|
been started with `&'. If JOBSPEC is not supplied, the current
|
|
job is used. The return status is zero unless it is run when job
|
|
control is not enabled, or, when run with job control enabled, any
|
|
JOBSPEC was not found or specifies a job that was started without
|
|
job control.
|
|
|
|
`fg'
|
|
fg [JOBSPEC]
|
|
|
|
Resume the job JOBSPEC in the foreground and make it the current
|
|
job. If JOBSPEC is not supplied, the current job is used. The
|
|
return status is that of the command placed into the foreground,
|
|
or non-zero if run when job control is disabled or, when run with
|
|
job control enabled, JOBSPEC does not specify a valid job or
|
|
JOBSPEC specifies a job that was started without job control.
|
|
|
|
`jobs'
|
|
jobs [-lnprs] [JOBSPEC]
|
|
jobs -x COMMAND [ARGUMENTS]
|
|
|
|
The first form lists the active jobs. The options have the
|
|
following meanings:
|
|
|
|
`-l'
|
|
List process IDs in addition to the normal information.
|
|
|
|
`-n'
|
|
Display information only about jobs that have changed status
|
|
since the user was last notified of their status.
|
|
|
|
`-p'
|
|
List only the process ID of the job's process group leader.
|
|
|
|
`-r'
|
|
Display only running jobs.
|
|
|
|
`-s'
|
|
Display only stopped jobs.
|
|
|
|
If JOBSPEC is given, output is restricted to information about
|
|
that job. If JOBSPEC is not supplied, the status of all jobs is
|
|
listed.
|
|
|
|
If the `-x' option is supplied, `jobs' replaces any JOBSPEC found
|
|
in COMMAND or ARGUMENTS with the corresponding process group ID,
|
|
and executes COMMAND, passing it ARGUMENTs, returning its exit
|
|
status.
|
|
|
|
`kill'
|
|
kill [-s SIGSPEC] [-n SIGNUM] [-SIGSPEC] JOBSPEC or PID
|
|
kill -l [EXIT_STATUS]
|
|
|
|
Send a signal specified by SIGSPEC or SIGNUM to the process named
|
|
by job specification JOBSPEC or process ID PID. SIGSPEC is either
|
|
a case-insensitive signal name such as `SIGINT' (with or without
|
|
the `SIG' prefix) or a signal number; SIGNUM is a signal number.
|
|
If SIGSPEC and SIGNUM are not present, `SIGTERM' is used. The
|
|
`-l' option lists the signal names. If any arguments are supplied
|
|
when `-l' is given, the names of the signals corresponding to the
|
|
arguments are listed, and the return status is zero. EXIT_STATUS
|
|
is a number specifying a signal number or the exit status of a
|
|
process terminated by a signal. The return status is zero if at
|
|
least one signal was successfully sent, or non-zero if an error
|
|
occurs or an invalid option is encountered.
|
|
|
|
`wait'
|
|
wait [-n] [JOBSPEC or PID ...]
|
|
|
|
Wait until the child process specified by each process ID PID or
|
|
job specification JOBSPEC exits and return the exit status of the
|
|
last command waited for. If a job spec is given, all processes in
|
|
the job are waited for. If no arguments are given, all currently
|
|
active child processes are waited for, and the return status is
|
|
zero. If the `-n' option is supplied, `wait' waits for any job to
|
|
terminate and returns its exit status. If neither JOBSPEC nor PID
|
|
specifies an active child process of the shell, the return status
|
|
is 127.
|
|
|
|
`disown'
|
|
disown [-ar] [-h] [JOBSPEC ...]
|
|
|
|
Without options, remove each JOBSPEC from the table of active jobs.
|
|
If the `-h' option is given, the job is not removed from the table,
|
|
but is marked so that `SIGHUP' is not sent to the job if the shell
|
|
receives a `SIGHUP'. If JOBSPEC is not present, and neither the
|
|
`-a' nor the `-r' option is supplied, the current job is used. If
|
|
no JOBSPEC is supplied, the `-a' option means to remove or mark
|
|
all jobs; the `-r' option without a JOBSPEC argument restricts
|
|
operation to running jobs.
|
|
|
|
`suspend'
|
|
suspend [-f]
|
|
|
|
Suspend the execution of this shell until it receives a `SIGCONT'
|
|
signal. A login shell cannot be suspended; the `-f' option can be
|
|
used to override this and force the suspension.
|
|
|
|
When job control is not active, the `kill' and `wait' builtins do
|
|
not accept JOBSPEC arguments. They must be supplied process IDs.
|
|
|
|
|
|
File: bashref.info, Node: Job Control Variables, Prev: Job Control Builtins, Up: Job Control
|
|
|
|
7.3 Job Control Variables
|
|
=========================
|
|
|
|
`auto_resume'
|
|
This variable controls how the shell interacts with the user and
|
|
job control. If this variable exists then single word simple
|
|
commands without redirections are treated as candidates for
|
|
resumption of an existing job. There is no ambiguity allowed; if
|
|
there is more than one job beginning with the string typed, then
|
|
the most recently accessed job will be selected. The name of a
|
|
stopped job, in this context, is the command line used to start
|
|
it. If this variable is set to the value `exact', the string
|
|
supplied must match the name of a stopped job exactly; if set to
|
|
`substring', the string supplied needs to match a substring of the
|
|
name of a stopped job. The `substring' value provides
|
|
functionality analogous to the `%?' job ID (*note Job Control
|
|
Basics::). If set to any other value, the supplied string must be
|
|
a prefix of a stopped job's name; this provides functionality
|
|
analogous to the `%' job ID.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Command Line Editing, Next: Using History Interactively, Prev: Job Control, Up: Top
|
|
|
|
8 Command Line Editing
|
|
**********************
|
|
|
|
This chapter describes the basic features of the GNU command line
|
|
editing interface. Command line editing is provided by the Readline
|
|
library, which is used by several different programs, including Bash.
|
|
Command line editing is enabled by default when using an interactive
|
|
shell, unless the `--noediting' option is supplied at shell invocation.
|
|
Line editing is also used when using the `-e' option to the `read'
|
|
builtin command (*note Bash Builtins::). By default, the line editing
|
|
commands are similar to those of Emacs. A vi-style line editing
|
|
interface is also available. Line editing can be enabled at any time
|
|
using the `-o emacs' or `-o vi' options to the `set' builtin command
|
|
(*note The Set Builtin::), or disabled using the `+o emacs' or `+o vi'
|
|
options to `set'.
|
|
|
|
* Menu:
|
|
|
|
* Introduction and Notation:: Notation used in this text.
|
|
* Readline Interaction:: The minimum set of commands for editing a line.
|
|
* Readline Init File:: Customizing Readline from a user's view.
|
|
* Bindable Readline Commands:: A description of most of the Readline commands
|
|
available for binding
|
|
* Readline vi Mode:: A short description of how to make Readline
|
|
behave like the vi editor.
|
|
|
|
* Programmable Completion:: How to specify the possible completions for
|
|
a specific command.
|
|
* Programmable Completion Builtins:: Builtin commands to specify how to
|
|
complete arguments for a particular command.
|
|
* A Programmable Completion Example:: An example shell function for
|
|
generating possible completions.
|
|
|
|
|
|
File: bashref.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
|
|
|
|
8.1 Introduction to Line Editing
|
|
================================
|
|
|
|
The following paragraphs describe the notation used to represent
|
|
keystrokes.
|
|
|
|
The text `C-k' is read as `Control-K' and describes the character
|
|
produced when the <k> key is pressed while the Control key is depressed.
|
|
|
|
The text `M-k' is read as `Meta-K' and describes the character
|
|
produced when the Meta key (if you have one) is depressed, and the <k>
|
|
key is pressed. The Meta key is labeled <ALT> on many keyboards. On
|
|
keyboards with two keys labeled <ALT> (usually to either side of the
|
|
space bar), the <ALT> on the left side is generally set to work as a
|
|
Meta key. The <ALT> key on the right may also be configured to work as
|
|
a Meta key or may be configured as some other modifier, such as a
|
|
Compose key for typing accented characters.
|
|
|
|
If you do not have a Meta or <ALT> key, or another key working as a
|
|
Meta key, the identical keystroke can be generated by typing <ESC>
|
|
_first_, and then typing <k>. Either process is known as "metafying"
|
|
the <k> key.
|
|
|
|
The text `M-C-k' is read as `Meta-Control-k' and describes the
|
|
character produced by "metafying" `C-k'.
|
|
|
|
In addition, several keys have their own names. Specifically,
|
|
<DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
|
|
when seen in this text, or in an init file (*note Readline Init File::).
|
|
If your keyboard lacks a <LFD> key, typing <C-j> will produce the
|
|
desired character. The <RET> key may be labeled <Return> or <Enter> on
|
|
some keyboards.
|
|
|
|
|
|
File: bashref.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
|
|
|
|
8.2 Readline Interaction
|
|
========================
|
|
|
|
Often during an interactive session you type in a long line of text,
|
|
only to notice that the first word on the line is misspelled. The
|
|
Readline library gives you a set of commands for manipulating the text
|
|
as you type it in, allowing you to just fix your typo, and not forcing
|
|
you to retype the majority of the line. Using these editing commands,
|
|
you move the cursor to the place that needs correction, and delete or
|
|
insert the text of the corrections. Then, when you are satisfied with
|
|
the line, you simply press <RET>. You do not have to be at the end of
|
|
the line to press <RET>; the entire line is accepted regardless of the
|
|
location of the cursor within the line.
|
|
|
|
* Menu:
|
|
|
|
* Readline Bare Essentials:: The least you need to know about Readline.
|
|
* Readline Movement Commands:: Moving about the input line.
|
|
* Readline Killing Commands:: How to delete text, and how to get it back!
|
|
* Readline Arguments:: Giving numeric arguments to commands.
|
|
* Searching:: Searching through previous lines.
|
|
|
|
|
|
File: bashref.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
|
|
|
|
8.2.1 Readline Bare Essentials
|
|
------------------------------
|
|
|
|
In order to enter characters into the line, simply type them. The typed
|
|
character appears where the cursor was, and then the cursor moves one
|
|
space to the right. If you mistype a character, you can use your erase
|
|
character to back up and delete the mistyped character.
|
|
|
|
Sometimes you may mistype a character, and not notice the error
|
|
until you have typed several other characters. In that case, you can
|
|
type `C-b' to move the cursor to the left, and then correct your
|
|
mistake. Afterwards, you can move the cursor to the right with `C-f'.
|
|
|
|
When you add text in the middle of a line, you will notice that
|
|
characters to the right of the cursor are `pushed over' to make room
|
|
for the text that you have inserted. Likewise, when you delete text
|
|
behind the cursor, characters to the right of the cursor are `pulled
|
|
back' to fill in the blank space created by the removal of the text. A
|
|
list of the bare essentials for editing the text of an input line
|
|
follows.
|
|
|
|
`C-b'
|
|
Move back one character.
|
|
|
|
`C-f'
|
|
Move forward one character.
|
|
|
|
<DEL> or <Backspace>
|
|
Delete the character to the left of the cursor.
|
|
|
|
`C-d'
|
|
Delete the character underneath the cursor.
|
|
|
|
Printing characters
|
|
Insert the character into the line at the cursor.
|
|
|
|
`C-_' or `C-x C-u'
|
|
Undo the last editing command. You can undo all the way back to an
|
|
empty line.
|
|
|
|
(Depending on your configuration, the <Backspace> key be set to delete
|
|
the character to the left of the cursor and the <DEL> key set to delete
|
|
the character underneath the cursor, like `C-d', rather than the
|
|
character to the left of the cursor.)
|
|
|
|
|
|
File: bashref.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
|
|
|
|
8.2.2 Readline Movement Commands
|
|
--------------------------------
|
|
|
|
The above table describes the most basic keystrokes that you need in
|
|
order to do editing of the input line. For your convenience, many
|
|
other commands have been added in addition to `C-b', `C-f', `C-d', and
|
|
<DEL>. Here are some commands for moving more rapidly about the line.
|
|
|
|
`C-a'
|
|
Move to the start of the line.
|
|
|
|
`C-e'
|
|
Move to the end of the line.
|
|
|
|
`M-f'
|
|
Move forward a word, where a word is composed of letters and
|
|
digits.
|
|
|
|
`M-b'
|
|
Move backward a word.
|
|
|
|
`C-l'
|
|
Clear the screen, reprinting the current line at the top.
|
|
|
|
Notice how `C-f' moves forward a character, while `M-f' moves
|
|
forward a word. It is a loose convention that control keystrokes
|
|
operate on characters while meta keystrokes operate on words.
|
|
|
|
|
|
File: bashref.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
|
|
|
|
8.2.3 Readline Killing Commands
|
|
-------------------------------
|
|
|
|
"Killing" text means to delete the text from the line, but to save it
|
|
away for later use, usually by "yanking" (re-inserting) it back into
|
|
the line. (`Cut' and `paste' are more recent jargon for `kill' and
|
|
`yank'.)
|
|
|
|
If the description for a command says that it `kills' text, then you
|
|
can be sure that you can get the text back in a different (or the same)
|
|
place later.
|
|
|
|
When you use a kill command, the text is saved in a "kill-ring".
|
|
Any number of consecutive kills save all of the killed text together, so
|
|
that when you yank it back, you get it all. The kill ring is not line
|
|
specific; the text that you killed on a previously typed line is
|
|
available to be yanked back later, when you are typing another line.
|
|
|
|
Here is the list of commands for killing text.
|
|
|
|
`C-k'
|
|
Kill the text from the current cursor position to the end of the
|
|
line.
|
|
|
|
`M-d'
|
|
Kill from the cursor to the end of the current word, or, if between
|
|
words, to the end of the next word. Word boundaries are the same
|
|
as those used by `M-f'.
|
|
|
|
`M-<DEL>'
|
|
Kill from the cursor the start of the current word, or, if between
|
|
words, to the start of the previous word. Word boundaries are the
|
|
same as those used by `M-b'.
|
|
|
|
`C-w'
|
|
Kill from the cursor to the previous whitespace. This is
|
|
different than `M-<DEL>' because the word boundaries differ.
|
|
|
|
|
|
Here is how to "yank" the text back into the line. Yanking means to
|
|
copy the most-recently-killed text from the kill buffer.
|
|
|
|
`C-y'
|
|
Yank the most recently killed text back into the buffer at the
|
|
cursor.
|
|
|
|
`M-y'
|
|
Rotate the kill-ring, and yank the new top. You can only do this
|
|
if the prior command is `C-y' or `M-y'.
|
|
|
|
|
|
File: bashref.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction
|
|
|
|
8.2.4 Readline Arguments
|
|
------------------------
|
|
|
|
You can pass numeric arguments to Readline commands. Sometimes the
|
|
argument acts as a repeat count, other times it is the sign of the
|
|
argument that is significant. If you pass a negative argument to a
|
|
command which normally acts in a forward direction, that command will
|
|
act in a backward direction. For example, to kill text back to the
|
|
start of the line, you might type `M-- C-k'.
|
|
|
|
The general way to pass numeric arguments to a command is to type
|
|
meta digits before the command. If the first `digit' typed is a minus
|
|
sign (`-'), then the sign of the argument will be negative. Once you
|
|
have typed one meta digit to get the argument started, you can type the
|
|
remainder of the digits, and then the command. For example, to give
|
|
the `C-d' command an argument of 10, you could type `M-1 0 C-d', which
|
|
will delete the next ten characters on the input line.
|
|
|
|
|
|
File: bashref.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction
|
|
|
|
8.2.5 Searching for Commands in the History
|
|
-------------------------------------------
|
|
|
|
Readline provides commands for searching through the command history
|
|
(*note Bash History Facilities::) for lines containing a specified
|
|
string. There are two search modes: "incremental" and
|
|
"non-incremental".
|
|
|
|
Incremental searches begin before the user has finished typing the
|
|
search string. As each character of the search string is typed,
|
|
Readline displays the next entry from the history matching the string
|
|
typed so far. An incremental search requires only as many characters
|
|
as needed to find the desired history entry. To search backward in the
|
|
history for a particular string, type `C-r'. Typing `C-s' searches
|
|
forward through the history. The characters present in the value of
|
|
the `isearch-terminators' variable are used to terminate an incremental
|
|
search. If that variable has not been assigned a value, the <ESC> and
|
|
`C-J' characters will terminate an incremental search. `C-g' will
|
|
abort an incremental search and restore the original line. When the
|
|
search is terminated, the history entry containing the search string
|
|
becomes the current line.
|
|
|
|
To find other matching entries in the history list, type `C-r' or
|
|
`C-s' as appropriate. This will search backward or forward in the
|
|
history for the next entry matching the search string typed so far.
|
|
Any other key sequence bound to a Readline command will terminate the
|
|
search and execute that command. For instance, a <RET> will terminate
|
|
the search and accept the line, thereby executing the command from the
|
|
history list. A movement command will terminate the search, make the
|
|
last line found the current line, and begin editing.
|
|
|
|
Readline remembers the last incremental search string. If two
|
|
`C-r's are typed without any intervening characters defining a new
|
|
search string, any remembered search string is used.
|
|
|
|
Non-incremental searches read the entire search string before
|
|
starting to search for matching history lines. The search string may be
|
|
typed by the user or be part of the contents of the current line.
|
|
|
|
|
|
File: bashref.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
|
|
|
|
8.3 Readline Init File
|
|
======================
|
|
|
|
Although the Readline library comes with a set of Emacs-like
|
|
keybindings installed by default, it is possible to use a different set
|
|
of keybindings. Any user can customize programs that use Readline by
|
|
putting commands in an "inputrc" file, conventionally in his home
|
|
directory. The name of this file is taken from the value of the shell
|
|
variable `INPUTRC'. If that variable is unset, the default is
|
|
`~/.inputrc'. If that file does not exist or cannot be read, the
|
|
ultimate default is `/etc/inputrc'.
|
|
|
|
When a program which uses the Readline library starts up, the init
|
|
file is read, and the key bindings are set.
|
|
|
|
In addition, the `C-x C-r' command re-reads this init file, thus
|
|
incorporating any changes that you might have made to it.
|
|
|
|
* Menu:
|
|
|
|
* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
|
|
|
|
* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
|
|
|
|
* Sample Init File:: An example inputrc file.
|
|
|
|
|
|
File: bashref.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File
|
|
|
|
8.3.1 Readline Init File Syntax
|
|
-------------------------------
|
|
|
|
There are only a few basic constructs allowed in the Readline init
|
|
file. Blank lines are ignored. Lines beginning with a `#' are
|
|
comments. Lines beginning with a `$' indicate conditional constructs
|
|
(*note Conditional Init Constructs::). Other lines denote variable
|
|
settings and key bindings.
|
|
|
|
Variable Settings
|
|
You can modify the run-time behavior of Readline by altering the
|
|
values of variables in Readline using the `set' command within the
|
|
init file. The syntax is simple:
|
|
|
|
set VARIABLE VALUE
|
|
|
|
Here, for example, is how to change from the default Emacs-like
|
|
key binding to use `vi' line editing commands:
|
|
|
|
set editing-mode vi
|
|
|
|
Variable names and values, where appropriate, are recognized
|
|
without regard to case. Unrecognized variable names are ignored.
|
|
|
|
Boolean variables (those that can be set to on or off) are set to
|
|
on if the value is null or empty, ON (case-insensitive), or 1.
|
|
Any other value results in the variable being set to off.
|
|
|
|
The `bind -V' command lists the current Readline variable names
|
|
and values. *Note Bash Builtins::.
|
|
|
|
A great deal of run-time behavior is changeable with the following
|
|
variables.
|
|
|
|
`bell-style'
|
|
Controls what happens when Readline wants to ring the
|
|
terminal bell. If set to `none', Readline never rings the
|
|
bell. If set to `visible', Readline uses a visible bell if
|
|
one is available. If set to `audible' (the default),
|
|
Readline attempts to ring the terminal's bell.
|
|
|
|
`bind-tty-special-chars'
|
|
If set to `on', Readline attempts to bind the control
|
|
characters treated specially by the kernel's terminal driver
|
|
to their Readline equivalents.
|
|
|
|
`colored-stats'
|
|
If set to `on', Readline displays possible completions using
|
|
different colors to indicate their file type. The color
|
|
definitions are taken from the value of the `LS_COLORS'
|
|
environment variable. The default is `off'.
|
|
|
|
`comment-begin'
|
|
The string to insert at the beginning of the line when the
|
|
`insert-comment' command is executed. The default value is
|
|
`"#"'.
|
|
|
|
`completion-display-width'
|
|
The number of screen columns used to display possible matches
|
|
when performing completion. The value is ignored if it is
|
|
less than 0 or greater than the terminal screen width. A
|
|
value of 0 will cause matches to be displayed one per line.
|
|
The default value is -1.
|
|
|
|
`completion-ignore-case'
|
|
If set to `on', Readline performs filename matching and
|
|
completion in a case-insensitive fashion. The default value
|
|
is `off'.
|
|
|
|
`completion-map-case'
|
|
If set to `on', and COMPLETION-IGNORE-CASE is enabled,
|
|
Readline treats hyphens (`-') and underscores (`_') as
|
|
equivalent when performing case-insensitive filename matching
|
|
and completion.
|
|
|
|
`completion-prefix-display-length'
|
|
The length in characters of the common prefix of a list of
|
|
possible completions that is displayed without modification.
|
|
When set to a value greater than zero, common prefixes longer
|
|
than this value are replaced with an ellipsis when displaying
|
|
possible completions.
|
|
|
|
`completion-query-items'
|
|
The number of possible completions that determines when the
|
|
user is asked whether the list of possibilities should be
|
|
displayed. If the number of possible completions is greater
|
|
than this value, Readline will ask the user whether or not he
|
|
wishes to view them; otherwise, they are simply listed. This
|
|
variable must be set to an integer value greater than or
|
|
equal to 0. A negative value means Readline should never ask.
|
|
The default limit is `100'.
|
|
|
|
`convert-meta'
|
|
If set to `on', Readline will convert characters with the
|
|
eighth bit set to an ASCII key sequence by stripping the
|
|
eighth bit and prefixing an <ESC> character, converting them
|
|
to a meta-prefixed key sequence. The default value is `on'.
|
|
|
|
`disable-completion'
|
|
If set to `On', Readline will inhibit word completion.
|
|
Completion characters will be inserted into the line as if
|
|
they had been mapped to `self-insert'. The default is `off'.
|
|
|
|
`editing-mode'
|
|
The `editing-mode' variable controls which default set of key
|
|
bindings is used. By default, Readline starts up in Emacs
|
|
editing mode, where the keystrokes are most similar to Emacs.
|
|
This variable can be set to either `emacs' or `vi'.
|
|
|
|
`echo-control-characters'
|
|
When set to `on', on operating systems that indicate they
|
|
support it, readline echoes a character corresponding to a
|
|
signal generated from the keyboard. The default is `on'.
|
|
|
|
`enable-keypad'
|
|
When set to `on', Readline will try to enable the application
|
|
keypad when it is called. Some systems need this to enable
|
|
the arrow keys. The default is `off'.
|
|
|
|
`enable-meta-key'
|
|
When set to `on', Readline will try to enable any meta
|
|
modifier key the terminal claims to support when it is
|
|
called. On many terminals, the meta key is used to send
|
|
eight-bit characters. The default is `on'.
|
|
|
|
`expand-tilde'
|
|
If set to `on', tilde expansion is performed when Readline
|
|
attempts word completion. The default is `off'.
|
|
|
|
`history-preserve-point'
|
|
If set to `on', the history code attempts to place the point
|
|
(the current cursor position) at the same location on each
|
|
history line retrieved with `previous-history' or
|
|
`next-history'. The default is `off'.
|
|
|
|
`history-size'
|
|
Set the maximum number of history entries saved in the
|
|
history list. If set to zero, any existing history entries
|
|
are deleted and no new entries are saved. If set to a value
|
|
less than zero, the number of history entries is not limited.
|
|
By default, the number of history entries is not limited.
|
|
|
|
`horizontal-scroll-mode'
|
|
This variable can be set to either `on' or `off'. Setting it
|
|
to `on' means that the text of the lines being edited will
|
|
scroll horizontally on a single screen line when they are
|
|
longer than the width of the screen, instead of wrapping onto
|
|
a new screen line. By default, this variable is set to `off'.
|
|
|
|
`input-meta'
|
|
If set to `on', Readline will enable eight-bit input (it will
|
|
not clear the eighth bit in the characters it reads),
|
|
regardless of what the terminal claims it can support. The
|
|
default value is `off'. The name `meta-flag' is a synonym
|
|
for this variable.
|
|
|
|
`isearch-terminators'
|
|
The string of characters that should terminate an incremental
|
|
search without subsequently executing the character as a
|
|
command (*note Searching::). If this variable has not been
|
|
given a value, the characters <ESC> and `C-J' will terminate
|
|
an incremental search.
|
|
|
|
`keymap'
|
|
Sets Readline's idea of the current keymap for key binding
|
|
commands. Acceptable `keymap' names are `emacs',
|
|
`emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
|
|
`vi-command', and `vi-insert'. `vi' is equivalent to
|
|
`vi-command'; `emacs' is equivalent to `emacs-standard'. The
|
|
default value is `emacs'. The value of the `editing-mode'
|
|
variable also affects the default keymap.
|
|
|
|
`keyseq-timeout'
|
|
Specifies the duration Readline will wait for a character
|
|
when reading an ambiguous key sequence (one that can form a
|
|
complete key sequence using the input read so far, or can
|
|
take additional input to complete a longer key sequence). If
|
|
no input is received within the timeout, Readline will use
|
|
the shorter but complete key sequence. The value is
|
|
specified in milliseconds, so a value of 1000 means that
|
|
Readline will wait one second for additional input. If this
|
|
variable is set to a value less than or equal to zero, or to a
|
|
non-numeric value, Readline will wait until another key is
|
|
pressed to decide which key sequence to complete. The
|
|
default value is `500'.
|
|
|
|
`mark-directories'
|
|
If set to `on', completed directory names have a slash
|
|
appended. The default is `on'.
|
|
|
|
`mark-modified-lines'
|
|
This variable, when set to `on', causes Readline to display an
|
|
asterisk (`*') at the start of history lines which have been
|
|
modified. This variable is `off' by default.
|
|
|
|
`mark-symlinked-directories'
|
|
If set to `on', completed names which are symbolic links to
|
|
directories have a slash appended (subject to the value of
|
|
`mark-directories'). The default is `off'.
|
|
|
|
`match-hidden-files'
|
|
This variable, when set to `on', causes Readline to match
|
|
files whose names begin with a `.' (hidden files) when
|
|
performing filename completion. If set to `off', the leading
|
|
`.' must be supplied by the user in the filename to be
|
|
completed. This variable is `on' by default.
|
|
|
|
`menu-complete-display-prefix'
|
|
If set to `on', menu completion displays the common prefix of
|
|
the list of possible completions (which may be empty) before
|
|
cycling through the list. The default is `off'.
|
|
|
|
`output-meta'
|
|
If set to `on', Readline will display characters with the
|
|
eighth bit set directly rather than as a meta-prefixed escape
|
|
sequence. The default is `off'.
|
|
|
|
`page-completions'
|
|
If set to `on', Readline uses an internal `more'-like pager
|
|
to display a screenful of possible completions at a time.
|
|
This variable is `on' by default.
|
|
|
|
`print-completions-horizontally'
|
|
If set to `on', Readline will display completions with matches
|
|
sorted horizontally in alphabetical order, rather than down
|
|
the screen. The default is `off'.
|
|
|
|
`revert-all-at-newline'
|
|
If set to `on', Readline will undo all changes to history
|
|
lines before returning when `accept-line' is executed. By
|
|
default, history lines may be modified and retain individual
|
|
undo lists across calls to `readline'. The default is `off'.
|
|
|
|
`show-all-if-ambiguous'
|
|
This alters the default behavior of the completion functions.
|
|
If set to `on', words which have more than one possible
|
|
completion cause the matches to be listed immediately instead
|
|
of ringing the bell. The default value is `off'.
|
|
|
|
`show-all-if-unmodified'
|
|
This alters the default behavior of the completion functions
|
|
in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to
|
|
`on', words which have more than one possible completion
|
|
without any possible partial completion (the possible
|
|
completions don't share a common prefix) cause the matches to
|
|
be listed immediately instead of ringing the bell. The
|
|
default value is `off'.
|
|
|
|
`show-mode-in-prompt'
|
|
If set to `on', add a character to the beginning of the prompt
|
|
indicating the editing mode: emacs (`@'), vi command (`:'),
|
|
or vi insertion (`+'). The default value is `off'.
|
|
|
|
`skip-completed-text'
|
|
If set to `on', this alters the default completion behavior
|
|
when inserting a single match into the line. It's only
|
|
active when performing completion in the middle of a word.
|
|
If enabled, readline does not insert characters from the
|
|
completion that match characters after point in the word
|
|
being completed, so portions of the word following the cursor
|
|
are not duplicated. For instance, if this is enabled,
|
|
attempting completion when the cursor is after the `e' in
|
|
`Makefile' will result in `Makefile' rather than
|
|
`Makefilefile', assuming there is a single possible
|
|
completion. The default value is `off'.
|
|
|
|
`visible-stats'
|
|
If set to `on', a character denoting a file's type is
|
|
appended to the filename when listing possible completions.
|
|
The default is `off'.
|
|
|
|
|
|
Key Bindings
|
|
The syntax for controlling key bindings in the init file is
|
|
simple. First you need to find the name of the command that you
|
|
want to change. The following sections contain tables of the
|
|
command name, the default keybinding, if any, and a short
|
|
description of what the command does.
|
|
|
|
Once you know the name of the command, simply place on a line in
|
|
the init file the name of the key you wish to bind the command to,
|
|
a colon, and then the name of the command. There can be no space
|
|
between the key name and the colon - that will be interpreted as
|
|
part of the key name. The name of the key can be expressed in
|
|
different ways, depending on what you find most comfortable.
|
|
|
|
In addition to command names, readline allows keys to be bound to
|
|
a string that is inserted when the key is pressed (a MACRO).
|
|
|
|
The `bind -p' command displays Readline function names and
|
|
bindings in a format that can put directly into an initialization
|
|
file. *Note Bash Builtins::.
|
|
|
|
KEYNAME: FUNCTION-NAME or MACRO
|
|
KEYNAME is the name of a key spelled out in English. For
|
|
example:
|
|
Control-u: universal-argument
|
|
Meta-Rubout: backward-kill-word
|
|
Control-o: "> output"
|
|
|
|
In the above example, `C-u' is bound to the function
|
|
`universal-argument', `M-DEL' is bound to the function
|
|
`backward-kill-word', and `C-o' is bound to run the macro
|
|
expressed on the right hand side (that is, to insert the text
|
|
`> output' into the line).
|
|
|
|
A number of symbolic character names are recognized while
|
|
processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
|
|
NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
|
|
|
|
"KEYSEQ": FUNCTION-NAME or MACRO
|
|
KEYSEQ differs from KEYNAME above in that strings denoting an
|
|
entire key sequence can be specified, by placing the key
|
|
sequence in double quotes. Some GNU Emacs style key escapes
|
|
can be used, as in the following example, but the special
|
|
character names are not recognized.
|
|
|
|
"\C-u": universal-argument
|
|
"\C-x\C-r": re-read-init-file
|
|
"\e[11~": "Function Key 1"
|
|
|
|
In the above example, `C-u' is again bound to the function
|
|
`universal-argument' (just as it was in the first example),
|
|
`C-x C-r' is bound to the function `re-read-init-file', and
|
|
`<ESC> <[> <1> <1> <~>' is bound to insert the text `Function
|
|
Key 1'.
|
|
|
|
|
|
The following GNU Emacs style escape sequences are available when
|
|
specifying key sequences:
|
|
|
|
`\C-'
|
|
control prefix
|
|
|
|
`\M-'
|
|
meta prefix
|
|
|
|
`\e'
|
|
an escape character
|
|
|
|
`\\'
|
|
backslash
|
|
|
|
`\"'
|
|
<">, a double quotation mark
|
|
|
|
`\''
|
|
<'>, a single quote or apostrophe
|
|
|
|
In addition to the GNU Emacs style escape sequences, a second set
|
|
of backslash escapes is available:
|
|
|
|
`\a'
|
|
alert (bell)
|
|
|
|
`\b'
|
|
backspace
|
|
|
|
`\d'
|
|
delete
|
|
|
|
`\f'
|
|
form feed
|
|
|
|
`\n'
|
|
newline
|
|
|
|
`\r'
|
|
carriage return
|
|
|
|
`\t'
|
|
horizontal tab
|
|
|
|
`\v'
|
|
vertical tab
|
|
|
|
`\NNN'
|
|
the eight-bit character whose value is the octal value NNN
|
|
(one to three digits)
|
|
|
|
`\xHH'
|
|
the eight-bit character whose value is the hexadecimal value
|
|
HH (one or two hex digits)
|
|
|
|
When entering the text of a macro, single or double quotes must be
|
|
used to indicate a macro definition. Unquoted text is assumed to
|
|
be a function name. In the macro body, the backslash escapes
|
|
described above are expanded. Backslash will quote any other
|
|
character in the macro text, including `"' and `''. For example,
|
|
the following binding will make `C-x \' insert a single `\' into
|
|
the line:
|
|
"\C-x\\": "\\"
|
|
|
|
|
|
|
|
File: bashref.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File
|
|
|
|
8.3.2 Conditional Init Constructs
|
|
---------------------------------
|
|
|
|
Readline implements a facility similar in spirit to the conditional
|
|
compilation features of the C preprocessor which allows key bindings
|
|
and variable settings to be performed as the result of tests. There
|
|
are four parser directives used.
|
|
|
|
`$if'
|
|
The `$if' construct allows bindings to be made based on the
|
|
editing mode, the terminal being used, or the application using
|
|
Readline. The text of the test extends to the end of the line; no
|
|
characters are required to isolate it.
|
|
|
|
`mode'
|
|
The `mode=' form of the `$if' directive is used to test
|
|
whether Readline is in `emacs' or `vi' mode. This may be
|
|
used in conjunction with the `set keymap' command, for
|
|
instance, to set bindings in the `emacs-standard' and
|
|
`emacs-ctlx' keymaps only if Readline is starting out in
|
|
`emacs' mode.
|
|
|
|
`term'
|
|
The `term=' form may be used to include terminal-specific key
|
|
bindings, perhaps to bind the key sequences output by the
|
|
terminal's function keys. The word on the right side of the
|
|
`=' is tested against both the full name of the terminal and
|
|
the portion of the terminal name before the first `-'. This
|
|
allows `sun' to match both `sun' and `sun-cmd', for instance.
|
|
|
|
`application'
|
|
The APPLICATION construct is used to include
|
|
application-specific settings. Each program using the
|
|
Readline library sets the APPLICATION NAME, and you can test
|
|
for a particular value. This could be used to bind key
|
|
sequences to functions useful for a specific program. For
|
|
instance, the following command adds a key sequence that
|
|
quotes the current or previous word in Bash:
|
|
$if Bash
|
|
# Quote the current or previous word
|
|
"\C-xq": "\eb\"\ef\""
|
|
$endif
|
|
|
|
`$endif'
|
|
This command, as seen in the previous example, terminates an `$if'
|
|
command.
|
|
|
|
`$else'
|
|
Commands in this branch of the `$if' directive are executed if the
|
|
test fails.
|
|
|
|
`$include'
|
|
This directive takes a single filename as an argument and reads
|
|
commands and bindings from that file. For example, the following
|
|
directive reads from `/etc/inputrc':
|
|
$include /etc/inputrc
|
|
|
|
|
|
File: bashref.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File
|
|
|
|
8.3.3 Sample Init File
|
|
----------------------
|
|
|
|
Here is an example of an INPUTRC file. This illustrates key binding,
|
|
variable assignment, and conditional syntax.
|
|
|
|
|
|
# This file controls the behaviour of line input editing for
|
|
# programs that use the GNU Readline library. Existing
|
|
# programs include FTP, Bash, and GDB.
|
|
#
|
|
# You can re-read the inputrc file with C-x C-r.
|
|
# Lines beginning with '#' are comments.
|
|
#
|
|
# First, include any systemwide bindings and variable
|
|
# assignments from /etc/Inputrc
|
|
$include /etc/Inputrc
|
|
|
|
#
|
|
# Set various bindings for emacs mode.
|
|
|
|
set editing-mode emacs
|
|
|
|
$if mode=emacs
|
|
|
|
Meta-Control-h: backward-kill-word Text after the function name is ignored
|
|
|
|
#
|
|
# Arrow keys in keypad mode
|
|
#
|
|
#"\M-OD": backward-char
|
|
#"\M-OC": forward-char
|
|
#"\M-OA": previous-history
|
|
#"\M-OB": next-history
|
|
#
|
|
# Arrow keys in ANSI mode
|
|
#
|
|
"\M-[D": backward-char
|
|
"\M-[C": forward-char
|
|
"\M-[A": previous-history
|
|
"\M-[B": next-history
|
|
#
|
|
# Arrow keys in 8 bit keypad mode
|
|
#
|
|
#"\M-\C-OD": backward-char
|
|
#"\M-\C-OC": forward-char
|
|
#"\M-\C-OA": previous-history
|
|
#"\M-\C-OB": next-history
|
|
#
|
|
# Arrow keys in 8 bit ANSI mode
|
|
#
|
|
#"\M-\C-[D": backward-char
|
|
#"\M-\C-[C": forward-char
|
|
#"\M-\C-[A": previous-history
|
|
#"\M-\C-[B": next-history
|
|
|
|
C-q: quoted-insert
|
|
|
|
$endif
|
|
|
|
# An old-style binding. This happens to be the default.
|
|
TAB: complete
|
|
|
|
# Macros that are convenient for shell interaction
|
|
$if Bash
|
|
# edit the path
|
|
"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
|
|
# prepare to type a quoted word --
|
|
# insert open and close double quotes
|
|
# and move to just after the open quote
|
|
"\C-x\"": "\"\"\C-b"
|
|
# insert a backslash (testing backslash escapes
|
|
# in sequences and macros)
|
|
"\C-x\\": "\\"
|
|
# Quote the current or previous word
|
|
"\C-xq": "\eb\"\ef\""
|
|
# Add a binding to refresh the line, which is unbound
|
|
"\C-xr": redraw-current-line
|
|
# Edit variable on current line.
|
|
"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
|
|
$endif
|
|
|
|
# use a visible bell if one is available
|
|
set bell-style visible
|
|
|
|
# don't strip characters to 7 bits when reading
|
|
set input-meta on
|
|
|
|
# allow iso-latin1 characters to be inserted rather
|
|
# than converted to prefix-meta sequences
|
|
set convert-meta off
|
|
|
|
# display characters with the eighth bit set directly
|
|
# rather than as meta-prefixed characters
|
|
set output-meta on
|
|
|
|
# if there are more than 150 possible completions for
|
|
# a word, ask the user if he wants to see all of them
|
|
set completion-query-items 150
|
|
|
|
# For FTP
|
|
$if Ftp
|
|
"\C-xg": "get \M-?"
|
|
"\C-xt": "put \M-?"
|
|
"\M-.": yank-last-arg
|
|
$endif
|
|
|
|
|
|
File: bashref.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
|
|
|
|
8.4 Bindable Readline Commands
|
|
==============================
|
|
|
|
* Menu:
|
|
|
|
* Commands For Moving:: Moving about the line.
|
|
* Commands For History:: Getting at previous lines.
|
|
* Commands For Text:: Commands for changing text.
|
|
* Commands For Killing:: Commands for killing and yanking.
|
|
* Numeric Arguments:: Specifying numeric arguments, repeat counts.
|
|
* Commands For Completion:: Getting Readline to do the typing for you.
|
|
* Keyboard Macros:: Saving and re-executing typed characters
|
|
* Miscellaneous Commands:: Other miscellaneous commands.
|
|
|
|
This section describes Readline commands that may be bound to key
|
|
sequences. You can list your key bindings by executing `bind -P' or,
|
|
for a more terse format, suitable for an INPUTRC file, `bind -p'.
|
|
(*Note Bash Builtins::.) Command names without an accompanying key
|
|
sequence are unbound by default.
|
|
|
|
In the following descriptions, "point" refers to the current cursor
|
|
position, and "mark" refers to a cursor position saved by the
|
|
`set-mark' command. The text between the point and mark is referred to
|
|
as the "region".
|
|
|
|
|
|
File: bashref.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
|
|
|
|
8.4.1 Commands For Moving
|
|
-------------------------
|
|
|
|
`beginning-of-line (C-a)'
|
|
Move to the start of the current line.
|
|
|
|
`end-of-line (C-e)'
|
|
Move to the end of the line.
|
|
|
|
`forward-char (C-f)'
|
|
Move forward a character.
|
|
|
|
`backward-char (C-b)'
|
|
Move back a character.
|
|
|
|
`forward-word (M-f)'
|
|
Move forward to the end of the next word. Words are composed of
|
|
letters and digits.
|
|
|
|
`backward-word (M-b)'
|
|
Move back to the start of the current or previous word. Words are
|
|
composed of letters and digits.
|
|
|
|
`shell-forward-word ()'
|
|
Move forward to the end of the next word. Words are delimited by
|
|
non-quoted shell metacharacters.
|
|
|
|
`shell-backward-word ()'
|
|
Move back to the start of the current or previous word. Words are
|
|
delimited by non-quoted shell metacharacters.
|
|
|
|
`clear-screen (C-l)'
|
|
Clear the screen and redraw the current line, leaving the current
|
|
line at the top of the screen.
|
|
|
|
`redraw-current-line ()'
|
|
Refresh the current line. By default, this is unbound.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands
|
|
|
|
8.4.2 Commands For Manipulating The History
|
|
-------------------------------------------
|
|
|
|
`accept-line (Newline or Return)'
|
|
Accept the line regardless of where the cursor is. If this line is
|
|
non-empty, add it to the history list according to the setting of
|
|
the `HISTCONTROL' and `HISTIGNORE' variables. If this line is a
|
|
modified history line, then restore the history line to its
|
|
original state.
|
|
|
|
`previous-history (C-p)'
|
|
Move `back' through the history list, fetching the previous
|
|
command.
|
|
|
|
`next-history (C-n)'
|
|
Move `forward' through the history list, fetching the next command.
|
|
|
|
`beginning-of-history (M-<)'
|
|
Move to the first line in the history.
|
|
|
|
`end-of-history (M->)'
|
|
Move to the end of the input history, i.e., the line currently
|
|
being entered.
|
|
|
|
`reverse-search-history (C-r)'
|
|
Search backward starting at the current line and moving `up'
|
|
through the history as necessary. This is an incremental search.
|
|
|
|
`forward-search-history (C-s)'
|
|
Search forward starting at the current line and moving `down'
|
|
through the the history as necessary. This is an incremental
|
|
search.
|
|
|
|
`non-incremental-reverse-search-history (M-p)'
|
|
Search backward starting at the current line and moving `up'
|
|
through the history as necessary using a non-incremental search
|
|
for a string supplied by the user.
|
|
|
|
`non-incremental-forward-search-history (M-n)'
|
|
Search forward starting at the current line and moving `down'
|
|
through the the history as necessary using a non-incremental search
|
|
for a string supplied by the user.
|
|
|
|
`history-search-forward ()'
|
|
Search forward through the history for the string of characters
|
|
between the start of the current line and the point. The search
|
|
string must match at the beginning of a history line. This is a
|
|
non-incremental search. By default, this command is unbound.
|
|
|
|
`history-search-backward ()'
|
|
Search backward through the history for the string of characters
|
|
between the start of the current line and the point. The search
|
|
string must match at the beginning of a history line. This is a
|
|
non-incremental search. By default, this command is unbound.
|
|
|
|
`history-substr-search-forward ()'
|
|
Search forward through the history for the string of characters
|
|
between the start of the current line and the point. The search
|
|
string may match anywhere in a history line. This is a
|
|
non-incremental search. By default, this command is unbound.
|
|
|
|
`history-substr-search-backward ()'
|
|
Search backward through the history for the string of characters
|
|
between the start of the current line and the point. The search
|
|
string may match anywhere in a history line. This is a
|
|
non-incremental search. By default, this command is unbound.
|
|
|
|
`yank-nth-arg (M-C-y)'
|
|
Insert the first argument to the previous command (usually the
|
|
second word on the previous line) at point. With an argument N,
|
|
insert the Nth word from the previous command (the words in the
|
|
previous command begin with word 0). A negative argument inserts
|
|
the Nth word from the end of the previous command. Once the
|
|
argument N is computed, the argument is extracted as if the `!N'
|
|
history expansion had been specified.
|
|
|
|
`yank-last-arg (M-. or M-_)'
|
|
Insert last argument to the previous command (the last word of the
|
|
previous history entry). With a numeric argument, behave exactly
|
|
like `yank-nth-arg'. Successive calls to `yank-last-arg' move
|
|
back through the history list, inserting the last word (or the
|
|
word specified by the argument to the first call) of each line in
|
|
turn. Any numeric argument supplied to these successive calls
|
|
determines the direction to move through the history. A negative
|
|
argument switches the direction through the history (back or
|
|
forward). The history expansion facilities are used to extract
|
|
the last argument, as if the `!$' history expansion had been
|
|
specified.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
|
|
|
|
8.4.3 Commands For Changing Text
|
|
--------------------------------
|
|
|
|
`delete-char (C-d)'
|
|
Delete the character at point. If point is at the beginning of
|
|
the line, there are no characters in the line, and the last
|
|
character typed was not bound to `delete-char', then return EOF.
|
|
|
|
`backward-delete-char (Rubout)'
|
|
Delete the character behind the cursor. A numeric argument means
|
|
to kill the characters instead of deleting them.
|
|
|
|
`forward-backward-delete-char ()'
|
|
Delete the character under the cursor, unless the cursor is at the
|
|
end of the line, in which case the character behind the cursor is
|
|
deleted. By default, this is not bound to a key.
|
|
|
|
`quoted-insert (C-q or C-v)'
|
|
Add the next character typed to the line verbatim. This is how to
|
|
insert key sequences like `C-q', for example.
|
|
|
|
`self-insert (a, b, A, 1, !, ...)'
|
|
Insert yourself.
|
|
|
|
`transpose-chars (C-t)'
|
|
Drag the character before the cursor forward over the character at
|
|
the cursor, moving the cursor forward as well. If the insertion
|
|
point is at the end of the line, then this transposes the last two
|
|
characters of the line. Negative arguments have no effect.
|
|
|
|
`transpose-words (M-t)'
|
|
Drag the word before point past the word after point, moving point
|
|
past that word as well. If the insertion point is at the end of
|
|
the line, this transposes the last two words on the line.
|
|
|
|
`upcase-word (M-u)'
|
|
Uppercase the current (or following) word. With a negative
|
|
argument, uppercase the previous word, but do not move the cursor.
|
|
|
|
`downcase-word (M-l)'
|
|
Lowercase the current (or following) word. With a negative
|
|
argument, lowercase the previous word, but do not move the cursor.
|
|
|
|
`capitalize-word (M-c)'
|
|
Capitalize the current (or following) word. With a negative
|
|
argument, capitalize the previous word, but do not move the cursor.
|
|
|
|
`overwrite-mode ()'
|
|
Toggle overwrite mode. With an explicit positive numeric argument,
|
|
switches to overwrite mode. With an explicit non-positive numeric
|
|
argument, switches to insert mode. This command affects only
|
|
`emacs' mode; `vi' mode does overwrite differently. Each call to
|
|
`readline()' starts in insert mode.
|
|
|
|
In overwrite mode, characters bound to `self-insert' replace the
|
|
text at point rather than pushing the text to the right.
|
|
Characters bound to `backward-delete-char' replace the character
|
|
before point with a space.
|
|
|
|
By default, this command is unbound.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
|
|
|
|
8.4.4 Killing And Yanking
|
|
-------------------------
|
|
|
|
`kill-line (C-k)'
|
|
Kill the text from point to the end of the line.
|
|
|
|
`backward-kill-line (C-x Rubout)'
|
|
Kill backward to the beginning of the line.
|
|
|
|
`unix-line-discard (C-u)'
|
|
Kill backward from the cursor to the beginning of the current line.
|
|
|
|
`kill-whole-line ()'
|
|
Kill all characters on the current line, no matter where point is.
|
|
By default, this is unbound.
|
|
|
|
`kill-word (M-d)'
|
|
Kill from point to the end of the current word, or if between
|
|
words, to the end of the next word. Word boundaries are the same
|
|
as `forward-word'.
|
|
|
|
`backward-kill-word (M-<DEL>)'
|
|
Kill the word behind point. Word boundaries are the same as
|
|
`backward-word'.
|
|
|
|
`shell-kill-word ()'
|
|
Kill from point to the end of the current word, or if between
|
|
words, to the end of the next word. Word boundaries are the same
|
|
as `shell-forward-word'.
|
|
|
|
`shell-backward-kill-word ()'
|
|
Kill the word behind point. Word boundaries are the same as
|
|
`shell-backward-word'.
|
|
|
|
`unix-word-rubout (C-w)'
|
|
Kill the word behind point, using white space as a word boundary.
|
|
The killed text is saved on the kill-ring.
|
|
|
|
`unix-filename-rubout ()'
|
|
Kill the word behind point, using white space and the slash
|
|
character as the word boundaries. The killed text is saved on the
|
|
kill-ring.
|
|
|
|
`delete-horizontal-space ()'
|
|
Delete all spaces and tabs around point. By default, this is
|
|
unbound.
|
|
|
|
`kill-region ()'
|
|
Kill the text in the current region. By default, this command is
|
|
unbound.
|
|
|
|
`copy-region-as-kill ()'
|
|
Copy the text in the region to the kill buffer, so it can be yanked
|
|
right away. By default, this command is unbound.
|
|
|
|
`copy-backward-word ()'
|
|
Copy the word before point to the kill buffer. The word
|
|
boundaries are the same as `backward-word'. By default, this
|
|
command is unbound.
|
|
|
|
`copy-forward-word ()'
|
|
Copy the word following point to the kill buffer. The word
|
|
boundaries are the same as `forward-word'. By default, this
|
|
command is unbound.
|
|
|
|
`yank (C-y)'
|
|
Yank the top of the kill ring into the buffer at point.
|
|
|
|
`yank-pop (M-y)'
|
|
Rotate the kill-ring, and yank the new top. You can only do this
|
|
if the prior command is `yank' or `yank-pop'.
|
|
|
|
|
|
File: bashref.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
|
|
|
|
8.4.5 Specifying Numeric Arguments
|
|
----------------------------------
|
|
|
|
`digit-argument (M-0, M-1, ... M--)'
|
|
Add this digit to the argument already accumulating, or start a new
|
|
argument. `M--' starts a negative argument.
|
|
|
|
`universal-argument ()'
|
|
This is another way to specify an argument. If this command is
|
|
followed by one or more digits, optionally with a leading minus
|
|
sign, those digits define the argument. If the command is
|
|
followed by digits, executing `universal-argument' again ends the
|
|
numeric argument, but is otherwise ignored. As a special case, if
|
|
this command is immediately followed by a character that is
|
|
neither a digit or minus sign, the argument count for the next
|
|
command is multiplied by four. The argument count is initially
|
|
one, so executing this function the first time makes the argument
|
|
count four, a second time makes the argument count sixteen, and so
|
|
on. By default, this is not bound to a key.
|
|
|
|
|
|
File: bashref.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
|
|
|
|
8.4.6 Letting Readline Type For You
|
|
-----------------------------------
|
|
|
|
`complete (<TAB>)'
|
|
Attempt to perform completion on the text before point. The
|
|
actual completion performed is application-specific. Bash
|
|
attempts completion treating the text as a variable (if the text
|
|
begins with `$'), username (if the text begins with `~'), hostname
|
|
(if the text begins with `@'), or command (including aliases and
|
|
functions) in turn. If none of these produces a match, filename
|
|
completion is attempted.
|
|
|
|
`possible-completions (M-?)'
|
|
List the possible completions of the text before point. When
|
|
displaying completions, Readline sets the number of columns used
|
|
for display to the value of `completion-display-width', the value
|
|
of the environment variable `COLUMNS', or the screen width, in
|
|
that order.
|
|
|
|
`insert-completions (M-*)'
|
|
Insert all completions of the text before point that would have
|
|
been generated by `possible-completions'.
|
|
|
|
`menu-complete ()'
|
|
Similar to `complete', but replaces the word to be completed with
|
|
a single match from the list of possible completions. Repeated
|
|
execution of `menu-complete' steps through the list of possible
|
|
completions, inserting each match in turn. At the end of the list
|
|
of completions, the bell is rung (subject to the setting of
|
|
`bell-style') and the original text is restored. An argument of N
|
|
moves N positions forward in the list of matches; a negative
|
|
argument may be used to move backward through the list. This
|
|
command is intended to be bound to <TAB>, but is unbound by
|
|
default.
|
|
|
|
`menu-complete-backward ()'
|
|
Identical to `menu-complete', but moves backward through the list
|
|
of possible completions, as if `menu-complete' had been given a
|
|
negative argument.
|
|
|
|
`delete-char-or-list ()'
|
|
Deletes the character under the cursor if not at the beginning or
|
|
end of the line (like `delete-char'). If at the end of the line,
|
|
behaves identically to `possible-completions'. This command is
|
|
unbound by default.
|
|
|
|
`complete-filename (M-/)'
|
|
Attempt filename completion on the text before point.
|
|
|
|
`possible-filename-completions (C-x /)'
|
|
List the possible completions of the text before point, treating
|
|
it as a filename.
|
|
|
|
`complete-username (M-~)'
|
|
Attempt completion on the text before point, treating it as a
|
|
username.
|
|
|
|
`possible-username-completions (C-x ~)'
|
|
List the possible completions of the text before point, treating
|
|
it as a username.
|
|
|
|
`complete-variable (M-$)'
|
|
Attempt completion on the text before point, treating it as a
|
|
shell variable.
|
|
|
|
`possible-variable-completions (C-x $)'
|
|
List the possible completions of the text before point, treating
|
|
it as a shell variable.
|
|
|
|
`complete-hostname (M-@)'
|
|
Attempt completion on the text before point, treating it as a
|
|
hostname.
|
|
|
|
`possible-hostname-completions (C-x @)'
|
|
List the possible completions of the text before point, treating
|
|
it as a hostname.
|
|
|
|
`complete-command (M-!)'
|
|
Attempt completion on the text before point, treating it as a
|
|
command name. Command completion attempts to match the text
|
|
against aliases, reserved words, shell functions, shell builtins,
|
|
and finally executable filenames, in that order.
|
|
|
|
`possible-command-completions (C-x !)'
|
|
List the possible completions of the text before point, treating
|
|
it as a command name.
|
|
|
|
`dynamic-complete-history (M-<TAB>)'
|
|
Attempt completion on the text before point, comparing the text
|
|
against lines from the history list for possible completion
|
|
matches.
|
|
|
|
`dabbrev-expand ()'
|
|
Attempt menu completion on the text before point, comparing the
|
|
text against lines from the history list for possible completion
|
|
matches.
|
|
|
|
`complete-into-braces (M-{)'
|
|
Perform filename completion and insert the list of possible
|
|
completions enclosed within braces so the list is available to the
|
|
shell (*note Brace Expansion::).
|
|
|
|
|
|
|
|
File: bashref.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
|
|
|
|
8.4.7 Keyboard Macros
|
|
---------------------
|
|
|
|
`start-kbd-macro (C-x ()'
|
|
Begin saving the characters typed into the current keyboard macro.
|
|
|
|
`end-kbd-macro (C-x ))'
|
|
Stop saving the characters typed into the current keyboard macro
|
|
and save the definition.
|
|
|
|
`call-last-kbd-macro (C-x e)'
|
|
Re-execute the last keyboard macro defined, by making the
|
|
characters in the macro appear as if typed at the keyboard.
|
|
|
|
`print-last-kbd-macro ()'
|
|
Print the last keboard macro defined in a format suitable for the
|
|
INPUTRC file.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands
|
|
|
|
8.4.8 Some Miscellaneous Commands
|
|
---------------------------------
|
|
|
|
`re-read-init-file (C-x C-r)'
|
|
Read in the contents of the INPUTRC file, and incorporate any
|
|
bindings or variable assignments found there.
|
|
|
|
`abort (C-g)'
|
|
Abort the current editing command and ring the terminal's bell
|
|
(subject to the setting of `bell-style').
|
|
|
|
`do-uppercase-version (M-a, M-b, M-X, ...)'
|
|
If the metafied character X is lowercase, run the command that is
|
|
bound to the corresponding uppercase character.
|
|
|
|
`prefix-meta (<ESC>)'
|
|
Metafy the next character typed. This is for keyboards without a
|
|
meta key. Typing `<ESC> f' is equivalent to typing `M-f'.
|
|
|
|
`undo (C-_ or C-x C-u)'
|
|
Incremental undo, separately remembered for each line.
|
|
|
|
`revert-line (M-r)'
|
|
Undo all changes made to this line. This is like executing the
|
|
`undo' command enough times to get back to the beginning.
|
|
|
|
`tilde-expand (M-&)'
|
|
Perform tilde expansion on the current word.
|
|
|
|
`set-mark (C-@)'
|
|
Set the mark to the point. If a numeric argument is supplied, the
|
|
mark is set to that position.
|
|
|
|
`exchange-point-and-mark (C-x C-x)'
|
|
Swap the point with the mark. The current cursor position is set
|
|
to the saved position, and the old cursor position is saved as the
|
|
mark.
|
|
|
|
`character-search (C-])'
|
|
A character is read and point is moved to the next occurrence of
|
|
that character. A negative count searches for previous
|
|
occurrences.
|
|
|
|
`character-search-backward (M-C-])'
|
|
A character is read and point is moved to the previous occurrence
|
|
of that character. A negative count searches for subsequent
|
|
occurrences.
|
|
|
|
`skip-csi-sequence ()'
|
|
Read enough characters to consume a multi-key sequence such as
|
|
those defined for keys like Home and End. Such sequences begin
|
|
with a Control Sequence Indicator (CSI), usually ESC-[. If this
|
|
sequence is bound to "\e[", keys producing such sequences will
|
|
have no effect unless explicitly bound to a readline command,
|
|
instead of inserting stray characters into the editing buffer.
|
|
This is unbound by default, but usually bound to ESC-[.
|
|
|
|
`insert-comment (M-#)'
|
|
Without a numeric argument, the value of the `comment-begin'
|
|
variable is inserted at the beginning of the current line. If a
|
|
numeric argument is supplied, this command acts as a toggle: if
|
|
the characters at the beginning of the line do not match the value
|
|
of `comment-begin', the value is inserted, otherwise the
|
|
characters in `comment-begin' are deleted from the beginning of
|
|
the line. In either case, the line is accepted as if a newline
|
|
had been typed. The default value of `comment-begin' causes this
|
|
command to make the current line a shell comment. If a numeric
|
|
argument causes the comment character to be removed, the line will
|
|
be executed by the shell.
|
|
|
|
`dump-functions ()'
|
|
Print all of the functions and their key bindings to the Readline
|
|
output stream. If a numeric argument is supplied, the output is
|
|
formatted in such a way that it can be made part of an INPUTRC
|
|
file. This command is unbound by default.
|
|
|
|
`dump-variables ()'
|
|
Print all of the settable variables and their values to the
|
|
Readline output stream. If a numeric argument is supplied, the
|
|
output is formatted in such a way that it can be made part of an
|
|
INPUTRC file. This command is unbound by default.
|
|
|
|
`dump-macros ()'
|
|
Print all of the Readline key sequences bound to macros and the
|
|
strings they output. If a numeric argument is supplied, the
|
|
output is formatted in such a way that it can be made part of an
|
|
INPUTRC file. This command is unbound by default.
|
|
|
|
`glob-complete-word (M-g)'
|
|
The word before point is treated as a pattern for pathname
|
|
expansion, with an asterisk implicitly appended. This pattern is
|
|
used to generate a list of matching file names for possible
|
|
completions.
|
|
|
|
`glob-expand-word (C-x *)'
|
|
The word before point is treated as a pattern for pathname
|
|
expansion, and the list of matching file names is inserted,
|
|
replacing the word. If a numeric argument is supplied, a `*' is
|
|
appended before pathname expansion.
|
|
|
|
`glob-list-expansions (C-x g)'
|
|
The list of expansions that would have been generated by
|
|
`glob-expand-word' is displayed, and the line is redrawn. If a
|
|
numeric argument is supplied, a `*' is appended before pathname
|
|
expansion.
|
|
|
|
`display-shell-version (C-x C-v)'
|
|
Display version information about the current instance of Bash.
|
|
|
|
`shell-expand-line (M-C-e)'
|
|
Expand the line as the shell does. This performs alias and
|
|
history expansion as well as all of the shell word expansions
|
|
(*note Shell Expansions::).
|
|
|
|
`history-expand-line (M-^)'
|
|
Perform history expansion on the current line.
|
|
|
|
`magic-space ()'
|
|
Perform history expansion on the current line and insert a space
|
|
(*note History Interaction::).
|
|
|
|
`alias-expand-line ()'
|
|
Perform alias expansion on the current line (*note Aliases::).
|
|
|
|
`history-and-alias-expand-line ()'
|
|
Perform history and alias expansion on the current line.
|
|
|
|
`insert-last-argument (M-. or M-_)'
|
|
A synonym for `yank-last-arg'.
|
|
|
|
`operate-and-get-next (C-o)'
|
|
Accept the current line for execution and fetch the next line
|
|
relative to the current line from the history for editing. Any
|
|
argument is ignored.
|
|
|
|
`edit-and-execute-command (C-xC-e)'
|
|
Invoke an editor on the current command line, and execute the
|
|
result as shell commands. Bash attempts to invoke `$VISUAL',
|
|
`$EDITOR', and `emacs' as the editor, in that order.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Readline vi Mode, Next: Programmable Completion, Prev: Bindable Readline Commands, Up: Command Line Editing
|
|
|
|
8.5 Readline vi Mode
|
|
====================
|
|
|
|
While the Readline library does not have a full set of `vi' editing
|
|
functions, it does contain enough to allow simple editing of the line.
|
|
The Readline `vi' mode behaves as specified in the POSIX standard.
|
|
|
|
In order to switch interactively between `emacs' and `vi' editing
|
|
modes, use the `set -o emacs' and `set -o vi' commands (*note The Set
|
|
Builtin::). The Readline default is `emacs' mode.
|
|
|
|
When you enter a line in `vi' mode, you are already placed in
|
|
`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches
|
|
you into `command' mode, where you can edit the text of the line with
|
|
the standard `vi' movement keys, move to previous history lines with
|
|
`k' and subsequent lines with `j', and so forth.
|
|
|
|
|
|
File: bashref.info, Node: Programmable Completion, Next: Programmable Completion Builtins, Prev: Readline vi Mode, Up: Command Line Editing
|
|
|
|
8.6 Programmable Completion
|
|
===========================
|
|
|
|
When word completion is attempted for an argument to a command for
|
|
which a completion specification (a COMPSPEC) has been defined using
|
|
the `complete' builtin (*note Programmable Completion Builtins::), the
|
|
programmable completion facilities are invoked.
|
|
|
|
First, the command name is identified. If a compspec has been
|
|
defined for that command, the compspec is used to generate the list of
|
|
possible completions for the word. If the command word is the empty
|
|
string (completion attempted at the beginning of an empty line), any
|
|
compspec defined with the `-E' option to `complete' is used. If the
|
|
command word is a full pathname, a compspec for the full pathname is
|
|
searched for first. If no compspec is found for the full pathname, an
|
|
attempt is made to find a compspec for the portion following the final
|
|
slash. If those searches do not result in a compspec, any compspec
|
|
defined with the `-D' option to `complete' is used as the default.
|
|
|
|
Once a compspec has been found, it is used to generate the list of
|
|
matching words. If a compspec is not found, the default Bash completion
|
|
described above (*note Commands For Completion::) is performed.
|
|
|
|
First, the actions specified by the compspec are used. Only matches
|
|
which are prefixed by the word being completed are returned. When the
|
|
`-f' or `-d' option is used for filename or directory name completion,
|
|
the shell variable `FIGNORE' is used to filter the matches. *Note Bash
|
|
Variables::, for a description of `FIGNORE'.
|
|
|
|
Any completions specified by a filename expansion pattern to the
|
|
`-G' option are generated next. The words generated by the pattern
|
|
need not match the word being completed. The `GLOBIGNORE' shell
|
|
variable is not used to filter the matches, but the `FIGNORE' shell
|
|
variable is used.
|
|
|
|
Next, the string specified as the argument to the `-W' option is
|
|
considered. The string is first split using the characters in the `IFS'
|
|
special variable as delimiters. Shell quoting is honored. Each word
|
|
is then expanded using brace expansion, tilde expansion, parameter and
|
|
variable expansion, command substitution, and arithmetic expansion, as
|
|
described above (*note Shell Expansions::). The results are split
|
|
using the rules described above (*note Word Splitting::). The results
|
|
of the expansion are prefix-matched against the word being completed,
|
|
and the matching words become the possible completions.
|
|
|
|
After these matches have been generated, any shell function or
|
|
command specified with the `-F' and `-C' options is invoked. When the
|
|
command or function is invoked, the `COMP_LINE', `COMP_POINT',
|
|
`COMP_KEY', and `COMP_TYPE' variables are assigned values as described
|
|
above (*note Bash Variables::). If a shell function is being invoked,
|
|
the `COMP_WORDS' and `COMP_CWORD' variables are also set. When the
|
|
function or command is invoked, the first argument ($1) is the name of
|
|
the command whose arguments are being completed, the second argument
|
|
($2) is the word being completed, and the third argument ($3) is the
|
|
word preceding the word being completed on the current command line.
|
|
No filtering of the generated completions against the word being
|
|
completed is performed; the function or command has complete freedom in
|
|
generating the matches.
|
|
|
|
Any function specified with `-F' is invoked first. The function may
|
|
use any of the shell facilities, including the `compgen' and `compopt'
|
|
builtins described below (*note Programmable Completion Builtins::), to
|
|
generate the matches. It must put the possible completions in the
|
|
`COMPREPLY' array variable, one per array element.
|
|
|
|
Next, any command specified with the `-C' option is invoked in an
|
|
environment equivalent to command substitution. It should print a list
|
|
of completions, one per line, to the standard output. Backslash may be
|
|
used to escape a newline, if necessary.
|
|
|
|
After all of the possible completions are generated, any filter
|
|
specified with the `-X' option is applied to the list. The filter is a
|
|
pattern as used for pathname expansion; a `&' in the pattern is
|
|
replaced with the text of the word being completed. A literal `&' may
|
|
be escaped with a backslash; the backslash is removed before attempting
|
|
a match. Any completion that matches the pattern will be removed from
|
|
the list. A leading `!' negates the pattern; in this case any
|
|
completion not matching the pattern will be removed.
|
|
|
|
Finally, any prefix and suffix specified with the `-P' and `-S'
|
|
options are added to each member of the completion list, and the result
|
|
is returned to the Readline completion code as the list of possible
|
|
completions.
|
|
|
|
If the previously-applied actions do not generate any matches, and
|
|
the `-o dirnames' option was supplied to `complete' when the compspec
|
|
was defined, directory name completion is attempted.
|
|
|
|
If the `-o plusdirs' option was supplied to `complete' when the
|
|
compspec was defined, directory name completion is attempted and any
|
|
matches are added to the results of the other actions.
|
|
|
|
By default, if a compspec is found, whatever it generates is
|
|
returned to the completion code as the full set of possible completions.
|
|
The default Bash completions are not attempted, and the Readline default
|
|
of filename completion is disabled. If the `-o bashdefault' option was
|
|
supplied to `complete' when the compspec was defined, the default Bash
|
|
completions are attempted if the compspec generates no matches. If the
|
|
`-o default' option was supplied to `complete' when the compspec was
|
|
defined, Readline's default completion will be performed if the
|
|
compspec (and, if attempted, the default Bash completions) generate no
|
|
matches.
|
|
|
|
When a compspec indicates that directory name completion is desired,
|
|
the programmable completion functions force Readline to append a slash
|
|
to completed names which are symbolic links to directories, subject to
|
|
the value of the MARK-DIRECTORIES Readline variable, regardless of the
|
|
setting of the MARK-SYMLINKED-DIRECTORIES Readline variable.
|
|
|
|
There is some support for dynamically modifying completions. This is
|
|
most useful when used in combination with a default completion specified
|
|
with `-D'. It's possible for shell functions executed as completion
|
|
handlers to indicate that completion should be retried by returning an
|
|
exit status of 124. If a shell function returns 124, and changes the
|
|
compspec associated with the command on which completion is being
|
|
attempted (supplied as the first argument when the function is
|
|
executed), programmable completion restarts from the beginning, with an
|
|
attempt to find a new compspec for that command. This allows a set of
|
|
completions to be built dynamically as completion is attempted, rather
|
|
than being loaded all at once.
|
|
|
|
For instance, assuming that there is a library of compspecs, each
|
|
kept in a file corresponding to the name of the command, the following
|
|
default completion function would load completions dynamically:
|
|
|
|
_completion_loader()
|
|
{
|
|
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
|
|
}
|
|
complete -D -F _completion_loader -o bashdefault -o default
|
|
|
|
|
|
File: bashref.info, Node: Programmable Completion Builtins, Next: A Programmable Completion Example, Prev: Programmable Completion, Up: Command Line Editing
|
|
|
|
8.7 Programmable Completion Builtins
|
|
====================================
|
|
|
|
Three builtin commands are available to manipulate the programmable
|
|
completion facilities: one to specify how the arguments to a particular
|
|
command are to be completed, and two to modify the completion as it is
|
|
happening.
|
|
|
|
`compgen'
|
|
`compgen [OPTION] [WORD]'
|
|
|
|
Generate possible completion matches for WORD according to the
|
|
OPTIONs, which may be any option accepted by the `complete'
|
|
builtin with the exception of `-p' and `-r', and write the matches
|
|
to the standard output. When using the `-F' or `-C' options, the
|
|
various shell variables set by the programmable completion
|
|
facilities, while available, will not have useful values.
|
|
|
|
The matches will be generated in the same way as if the
|
|
programmable completion code had generated them directly from a
|
|
completion specification with the same flags. If WORD is
|
|
specified, only those completions matching WORD will be displayed.
|
|
|
|
The return value is true unless an invalid option is supplied, or
|
|
no matches were generated.
|
|
|
|
`complete'
|
|
`complete [-abcdefgjksuv] [-o COMP-OPTION] [-DE] [-A ACTION] [-G GLOBPAT] [-W WORDLIST]
|
|
[-F FUNCTION] [-C COMMAND] [-X FILTERPAT]
|
|
[-P PREFIX] [-S SUFFIX] NAME [NAME ...]'
|
|
`complete -pr [-DE] [NAME ...]'
|
|
|
|
Specify how arguments to each NAME should be completed. If the
|
|
`-p' option is supplied, or if no options are supplied, existing
|
|
completion specifications are printed in a way that allows them to
|
|
be reused as input. The `-r' option removes a completion
|
|
specification for each NAME, or, if no NAMEs are supplied, all
|
|
completion specifications. The `-D' option indicates that the
|
|
remaining options and actions should apply to the "default"
|
|
command completion; that is, completion attempted on a command for
|
|
which no completion has previously been defined. The `-E' option
|
|
indicates that the remaining options and actions should apply to
|
|
"empty" command completion; that is, completion attempted on a
|
|
blank line.
|
|
|
|
The process of applying these completion specifications when word
|
|
completion is attempted is described above (*note Programmable
|
|
Completion::). The `-D' option takes precedence over `-E'.
|
|
|
|
Other options, if specified, have the following meanings. The
|
|
arguments to the `-G', `-W', and `-X' options (and, if necessary,
|
|
the `-P' and `-S' options) should be quoted to protect them from
|
|
expansion before the `complete' builtin is invoked.
|
|
|
|
`-o COMP-OPTION'
|
|
The COMP-OPTION controls several aspects of the compspec's
|
|
behavior beyond the simple generation of completions.
|
|
COMP-OPTION may be one of:
|
|
|
|
`bashdefault'
|
|
Perform the rest of the default Bash completions if the
|
|
compspec generates no matches.
|
|
|
|
`default'
|
|
Use Readline's default filename completion if the
|
|
compspec generates no matches.
|
|
|
|
`dirnames'
|
|
Perform directory name completion if the compspec
|
|
generates no matches.
|
|
|
|
`filenames'
|
|
Tell Readline that the compspec generates filenames, so
|
|
it can perform any filename-specific processing (like
|
|
adding a slash to directory names quoting special
|
|
characters, or suppressing trailing spaces). This
|
|
option is intended to be used with shell functions
|
|
specified with `-F'.
|
|
|
|
`noquote'
|
|
Tell Readline not to quote the completed words if they
|
|
are filenames (quoting filenames is the default).
|
|
|
|
`nospace'
|
|
Tell Readline not to append a space (the default) to
|
|
words completed at the end of the line.
|
|
|
|
`plusdirs'
|
|
After any matches defined by the compspec are generated,
|
|
directory name completion is attempted and any matches
|
|
are added to the results of the other actions.
|
|
|
|
|
|
`-A ACTION'
|
|
The ACTION may be one of the following to generate a list of
|
|
possible completions:
|
|
|
|
`alias'
|
|
Alias names. May also be specified as `-a'.
|
|
|
|
`arrayvar'
|
|
Array variable names.
|
|
|
|
`binding'
|
|
Readline key binding names (*note Bindable Readline
|
|
Commands::).
|
|
|
|
`builtin'
|
|
Names of shell builtin commands. May also be specified
|
|
as `-b'.
|
|
|
|
`command'
|
|
Command names. May also be specified as `-c'.
|
|
|
|
`directory'
|
|
Directory names. May also be specified as `-d'.
|
|
|
|
`disabled'
|
|
Names of disabled shell builtins.
|
|
|
|
`enabled'
|
|
Names of enabled shell builtins.
|
|
|
|
`export'
|
|
Names of exported shell variables. May also be
|
|
specified as `-e'.
|
|
|
|
`file'
|
|
File names. May also be specified as `-f'.
|
|
|
|
`function'
|
|
Names of shell functions.
|
|
|
|
`group'
|
|
Group names. May also be specified as `-g'.
|
|
|
|
`helptopic'
|
|
Help topics as accepted by the `help' builtin (*note
|
|
Bash Builtins::).
|
|
|
|
`hostname'
|
|
Hostnames, as taken from the file specified by the
|
|
`HOSTFILE' shell variable (*note Bash Variables::).
|
|
|
|
`job'
|
|
Job names, if job control is active. May also be
|
|
specified as `-j'.
|
|
|
|
`keyword'
|
|
Shell reserved words. May also be specified as `-k'.
|
|
|
|
`running'
|
|
Names of running jobs, if job control is active.
|
|
|
|
`service'
|
|
Service names. May also be specified as `-s'.
|
|
|
|
`setopt'
|
|
Valid arguments for the `-o' option to the `set' builtin
|
|
(*note The Set Builtin::).
|
|
|
|
`shopt'
|
|
Shell option names as accepted by the `shopt' builtin
|
|
(*note Bash Builtins::).
|
|
|
|
`signal'
|
|
Signal names.
|
|
|
|
`stopped'
|
|
Names of stopped jobs, if job control is active.
|
|
|
|
`user'
|
|
User names. May also be specified as `-u'.
|
|
|
|
`variable'
|
|
Names of all shell variables. May also be specified as
|
|
`-v'.
|
|
|
|
`-C COMMAND'
|
|
COMMAND is executed in a subshell environment, and its output
|
|
is used as the possible completions.
|
|
|
|
`-F FUNCTION'
|
|
The shell function FUNCTION is executed in the current shell
|
|
environment. When it is executed, $1 is the name of the
|
|
command whose arguments are being completed, $2 is the word
|
|
being completed, and $3 is the word preceding the word being
|
|
completed, as described above (*note Programmable
|
|
Completion::). When it finishes, the possible completions
|
|
are retrieved from the value of the `COMPREPLY' array
|
|
variable.
|
|
|
|
`-G GLOBPAT'
|
|
The filename expansion pattern GLOBPAT is expanded to generate
|
|
the possible completions.
|
|
|
|
`-P PREFIX'
|
|
PREFIX is added at the beginning of each possible completion
|
|
after all other options have been applied.
|
|
|
|
`-S SUFFIX'
|
|
SUFFIX is appended to each possible completion after all
|
|
other options have been applied.
|
|
|
|
`-W WORDLIST'
|
|
The WORDLIST is split using the characters in the `IFS'
|
|
special variable as delimiters, and each resultant word is
|
|
expanded. The possible completions are the members of the
|
|
resultant list which match the word being completed.
|
|
|
|
`-X FILTERPAT'
|
|
FILTERPAT is a pattern as used for filename expansion. It is
|
|
applied to the list of possible completions generated by the
|
|
preceding options and arguments, and each completion matching
|
|
FILTERPAT is removed from the list. A leading `!' in
|
|
FILTERPAT negates the pattern; in this case, any completion
|
|
not matching FILTERPAT is removed.
|
|
|
|
The return value is true unless an invalid option is supplied, an
|
|
option other than `-p' or `-r' is supplied without a NAME
|
|
argument, an attempt is made to remove a completion specification
|
|
for a NAME for which no specification exists, or an error occurs
|
|
adding a completion specification.
|
|
|
|
`compopt'
|
|
`compopt' [-o OPTION] [-DE] [+o OPTION] [NAME]
|
|
Modify completion options for each NAME according to the OPTIONs,
|
|
or for the currently-executing completion if no NAMEs are supplied.
|
|
If no OPTIONs are given, display the completion options for each
|
|
NAME or the current completion. The possible values of OPTION are
|
|
those valid for the `complete' builtin described above. The `-D'
|
|
option indicates that the remaining options should apply to the
|
|
"default" command completion; that is, completion attempted on a
|
|
command for which no completion has previously been defined. The
|
|
`-E' option indicates that the remaining options should apply to
|
|
"empty" command completion; that is, completion attempted on a
|
|
blank line.
|
|
|
|
The `-D' option takes precedence over `-E'.
|
|
|
|
The return value is true unless an invalid option is supplied, an
|
|
attempt is made to modify the options for a NAME for which no
|
|
completion specification exists, or an output error occurs.
|
|
|
|
|
|
|
|
File: bashref.info, Node: A Programmable Completion Example, Prev: Programmable Completion Builtins, Up: Command Line Editing
|
|
|
|
8.8 A Programmable Completion Example
|
|
=====================================
|
|
|
|
The most common way to obtain additional completion functionality beyond
|
|
the default actions `complete' and `compgen' provide is to use a shell
|
|
function and bind it to a particular command using `complete -F'.
|
|
|
|
The following function provides completions for the `cd' builtin.
|
|
It is a reasonably good example of what shell functions must do when
|
|
used for completion. This function uses the word passsed as `$2' to
|
|
determine the directory name to complete. You can also use the
|
|
`COMP_WORDS' array variable; the current word is indexed by the
|
|
`COMP_CWORD' variable.
|
|
|
|
The function relies on the `complete' and `compgen' builtins to do
|
|
much of the work, adding only the things that the Bash `cd' does beyond
|
|
accepting basic directory names: tilde expansion (*note Tilde
|
|
Expansion::), searching directories in $CDPATH, which is described above
|
|
(*note Bourne Shell Builtins::), and basic support for the
|
|
`cdable_vars' shell option (*note The Shopt Builtin::). `_comp_cd'
|
|
modifies the value of IFS so that it contains only a newline to
|
|
accommodate file names containing spaces and tabs - `compgen' prints
|
|
the possible completions it generates one per line.
|
|
|
|
Possible completions go into the COMPREPLY array variable, one
|
|
completion per array element. The programmable completion system
|
|
retrieves the completions from there when the function returns.
|
|
|
|
# A completion function for the cd builtin
|
|
# based on the cd completion function from the bash_completion package
|
|
_comp_cd()
|
|
{
|
|
local IFS=$' \t\n' # normalize IFS
|
|
local cur _skipdot _cdpath
|
|
local i j k
|
|
|
|
# Tilde expansion, with side effect of expanding tilde to full pathname
|
|
case "$2" in
|
|
\~*) eval cur="$2" ;;
|
|
*) cur=$2 ;;
|
|
esac
|
|
|
|
# no cdpath or absolute pathname -- straight directory completion
|
|
if [[ -z "${CDPATH:-}" ]] || [[ "$cur" == @(./*|../*|/*) ]]; then
|
|
# compgen prints paths one per line; could also use while loop
|
|
IFS=$'\n'
|
|
COMPREPLY=( $(compgen -d -- "$cur") )
|
|
IFS=$' \t\n'
|
|
# CDPATH+directories in the current directory if not in CDPATH
|
|
else
|
|
IFS=$'\n'
|
|
_skipdot=false
|
|
# preprocess CDPATH to convert null directory names to .
|
|
_cdpath=${CDPATH/#:/.:}
|
|
_cdpath=${_cdpath//::/:.:}
|
|
_cdpath=${_cdpath/%:/:.}
|
|
for i in ${_cdpath//:/$'\n'}; do
|
|
if [[ $i -ef . ]]; then _skipdot=true; fi
|
|
k="${#COMPREPLY[@]}"
|
|
for j in $( compgen -d -- "$i/$cur" ); do
|
|
COMPREPLY[k++]=${j#$i/} # cut off directory
|
|
done
|
|
done
|
|
$_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") )
|
|
IFS=$' \t\n'
|
|
fi
|
|
|
|
# variable names if appropriate shell option set and no completions
|
|
if shopt -q cdable_vars && [[ ${#COMPREPLY[@]} -eq 0 ]]; then
|
|
COMPREPLY=( $(compgen -v -- "$cur") )
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
We install the completion function using the `-F' option to
|
|
`complete':
|
|
|
|
# Tell readline to quote appropriate and append slashes to directories;
|
|
# use the bash default completion for other arguments
|
|
complete -o filenames -o nospace -o bashdefault -F _comp_cd cd
|
|
|
|
Since we'd like Bash and Readline to take care of some of the other
|
|
details for us, we use several other options to tell Bash and Readline
|
|
what to do. The `-o filenames' option tells Readline that the possible
|
|
completions should be treated as filenames, and quoted appropriately.
|
|
That option will also cause Readline to append a slash to filenames it
|
|
can determine are directories (which is why we might want to extend
|
|
`_comp_cd' to append a slash if we're using directories found via
|
|
CDPATH: Readline can't tell those completions are directories). The
|
|
`-o nospace' option tells Readline to not append a space character to
|
|
the directory name, in case we want to append to it. The `-o
|
|
bashdefault' option brings in the rest of the "Bash default"
|
|
completions - possible completion that Bash adds to the default Readline
|
|
set. These include things like command name completion, variable
|
|
completion for words beginning with `{', completions containing pathname
|
|
expansion patterns (*note Filename Expansion::), and so on.
|
|
|
|
Once installed using `complete', `_comp_cd' will be called every
|
|
time we attempt word completion for a `cd' command.
|
|
|
|
Many more examples - an extensive collection of completions for most
|
|
of the common GNU, Unix, and Linux commands - are available as part of
|
|
the bash_completion project. This is installed by default on many
|
|
GNU/Linux distributions. Originally written by Ian Macdonald, the
|
|
project now lives at `http://bash-completion.alioth.debian.org/'.
|
|
There are ports for other systems such as Solaris and Mac OS X.
|
|
|
|
An older version of the bash_completion package is distributed with
|
|
bash in the `examples/complete' subdirectory.
|
|
|
|
|
|
File: bashref.info, Node: Using History Interactively, Next: Installing Bash, Prev: Command Line Editing, Up: Top
|
|
|
|
9 Using History Interactively
|
|
*****************************
|
|
|
|
This chapter describes how to use the GNU History Library
|
|
interactively, from a user's standpoint. It should be considered a
|
|
user's guide. For information on using the GNU History Library in
|
|
other programs, see the GNU Readline Library Manual.
|
|
|
|
* Menu:
|
|
|
|
* Bash History Facilities:: How Bash lets you manipulate your command
|
|
history.
|
|
* Bash History Builtins:: The Bash builtin commands that manipulate
|
|
the command history.
|
|
* History Interaction:: What it feels like using History as a user.
|
|
|
|
|
|
File: bashref.info, Node: Bash History Facilities, Next: Bash History Builtins, Up: Using History Interactively
|
|
|
|
9.1 Bash History Facilities
|
|
===========================
|
|
|
|
When the `-o history' option to the `set' builtin is enabled (*note The
|
|
Set Builtin::), the shell provides access to the "command history", the
|
|
list of commands previously typed. The value of the `HISTSIZE' shell
|
|
variable is used as the number of commands to save in a history list.
|
|
The text of the last `$HISTSIZE' commands (default 500) is saved. The
|
|
shell stores each command in the history list prior to parameter and
|
|
variable expansion but after history expansion is performed, subject to
|
|
the values of the shell variables `HISTIGNORE' and `HISTCONTROL'.
|
|
|
|
When the shell starts up, the history is initialized from the file
|
|
named by the `HISTFILE' variable (default `~/.bash_history'). The file
|
|
named by the value of `HISTFILE' is truncated, if necessary, to contain
|
|
no more than the number of lines specified by the value of the
|
|
`HISTFILESIZE' variable. When a shell with history enabled exits, the
|
|
last `$HISTSIZE' lines are copied from the history list to the file
|
|
named by `$HISTFILE'. If the `histappend' shell option is set (*note
|
|
Bash Builtins::), the lines are appended to the history file, otherwise
|
|
the history file is overwritten. If `HISTFILE' is unset, or if the
|
|
history file is unwritable, the history is not saved. After saving the
|
|
history, the history file is truncated to contain no more than
|
|
`$HISTFILESIZE' lines. If `HISTFILESIZE' is unset, or set to null, a
|
|
non-numeric value, or a numeric value less than zero, the history file
|
|
is not truncated.
|
|
|
|
If the `HISTTIMEFORMAT' is set, the time stamp information
|
|
associated with each history entry is written to the history file,
|
|
marked with the history comment character. When the history file is
|
|
read, lines beginning with the history comment character followed
|
|
immediately by a digit are interpreted as timestamps for the previous
|
|
history line.
|
|
|
|
The builtin command `fc' may be used to list or edit and re-execute
|
|
a portion of the history list. The `history' builtin may be used to
|
|
display or modify the history list and manipulate the history file.
|
|
When using command-line editing, search commands are available in each
|
|
editing mode that provide access to the history list (*note Commands
|
|
For History::).
|
|
|
|
The shell allows control over which commands are saved on the history
|
|
list. The `HISTCONTROL' and `HISTIGNORE' variables may be set to cause
|
|
the shell to save only a subset of the commands entered. The `cmdhist'
|
|
shell option, if enabled, causes the shell to attempt to save each line
|
|
of a multi-line command in the same history entry, adding semicolons
|
|
where necessary to preserve syntactic correctness. The `lithist' shell
|
|
option causes the shell to save the command with embedded newlines
|
|
instead of semicolons. The `shopt' builtin is used to set these
|
|
options. *Note Bash Builtins::, for a description of `shopt'.
|
|
|
|
|
|
File: bashref.info, Node: Bash History Builtins, Next: History Interaction, Prev: Bash History Facilities, Up: Using History Interactively
|
|
|
|
9.2 Bash History Builtins
|
|
=========================
|
|
|
|
Bash provides two builtin commands which manipulate the history list
|
|
and history file.
|
|
|
|
`fc'
|
|
`fc [-e ENAME] [-lnr] [FIRST] [LAST]'
|
|
`fc -s [PAT=REP] [COMMAND]'
|
|
|
|
The first form selects a range of commands from FIRST to LAST from
|
|
the history list and displays or edits and re-executes them. Both
|
|
FIRST and LAST may be specified as a string (to locate the most
|
|
recent command beginning with that string) or as a number (an
|
|
index into the history list, where a negative number is used as an
|
|
offset from the current command number). If LAST is not specified
|
|
it is set to FIRST. If FIRST is not specified it is set to the
|
|
previous command for editing and -16 for listing. If the `-l'
|
|
flag is given, the commands are listed on standard output. The
|
|
`-n' flag suppresses the command numbers when listing. The `-r'
|
|
flag reverses the order of the listing. Otherwise, the editor
|
|
given by ENAME is invoked on a file containing those commands. If
|
|
ENAME is not given, the value of the following variable expansion
|
|
is used: `${FCEDIT:-${EDITOR:-vi}}'. This says to use the value
|
|
of the `FCEDIT' variable if set, or the value of the `EDITOR'
|
|
variable if that is set, or `vi' if neither is set. When editing
|
|
is complete, the edited commands are echoed and executed.
|
|
|
|
In the second form, COMMAND is re-executed after each instance of
|
|
PAT in the selected command is replaced by REP. COMMAND is
|
|
intepreted the same as FIRST above.
|
|
|
|
A useful alias to use with the `fc' command is `r='fc -s'', so
|
|
that typing `r cc' runs the last command beginning with `cc' and
|
|
typing `r' re-executes the last command (*note Aliases::).
|
|
|
|
`history'
|
|
history [N]
|
|
history -c
|
|
history -d OFFSET
|
|
history [-anrw] [FILENAME]
|
|
history -ps ARG
|
|
|
|
With no options, display the history list with line numbers.
|
|
Lines prefixed with a `*' have been modified. An argument of N
|
|
lists only the last N lines. If the shell variable
|
|
`HISTTIMEFORMAT' is set and not null, it is used as a format
|
|
string for STRFTIME to display the time stamp associated with each
|
|
displayed history entry. No intervening blank is printed between
|
|
the formatted time stamp and the history line.
|
|
|
|
Options, if supplied, have the following meanings:
|
|
|
|
`-c'
|
|
Clear the history list. This may be combined with the other
|
|
options to replace the history list completely.
|
|
|
|
`-d OFFSET'
|
|
Delete the history entry at position OFFSET. OFFSET should
|
|
be specified as it appears when the history is displayed.
|
|
|
|
`-a'
|
|
Append the new history lines (history lines entered since the
|
|
beginning of the current Bash session) to the history file.
|
|
|
|
`-n'
|
|
Append the history lines not already read from the history
|
|
file to the current history list. These are lines appended
|
|
to the history file since the beginning of the current Bash
|
|
session.
|
|
|
|
`-r'
|
|
Read the history file and append its contents to the history
|
|
list.
|
|
|
|
`-w'
|
|
Write out the current history list to the history file.
|
|
|
|
`-p'
|
|
Perform history substitution on the ARGs and display the
|
|
result on the standard output, without storing the results in
|
|
the history list.
|
|
|
|
`-s'
|
|
The ARGs are added to the end of the history list as a single
|
|
entry.
|
|
|
|
|
|
When any of the `-w', `-r', `-a', or `-n' options is used, if
|
|
FILENAME is given, then it is used as the history file. If not,
|
|
then the value of the `HISTFILE' variable is used.
|
|
|
|
|
|
|
|
File: bashref.info, Node: History Interaction, Prev: Bash History Builtins, Up: Using History Interactively
|
|
|
|
9.3 History Expansion
|
|
=====================
|
|
|
|
The History library provides a history expansion feature that is similar
|
|
to the history expansion provided by `csh'. This section describes the
|
|
syntax used to manipulate the history information.
|
|
|
|
History expansions introduce words from the history list into the
|
|
input stream, making it easy to repeat commands, insert the arguments
|
|
to a previous command into the current input line, or fix errors in
|
|
previous commands quickly.
|
|
|
|
History expansion takes place in two parts. The first is to
|
|
determine which line from the history list should be used during
|
|
substitution. The second is to select portions of that line for
|
|
inclusion into the current one. The line selected from the history is
|
|
called the "event", and the portions of that line that are acted upon
|
|
are called "words". Various "modifiers" are available to manipulate
|
|
the selected words. The line is broken into words in the same fashion
|
|
that Bash does, so that several words surrounded by quotes are
|
|
considered one word. History expansions are introduced by the
|
|
appearance of the history expansion character, which is `!' by default.
|
|
Only `\' and `'' may be used to escape the history expansion character.
|
|
|
|
Several shell options settable with the `shopt' builtin (*note Bash
|
|
Builtins::) may be used to tailor the behavior of history expansion.
|
|
If the `histverify' shell option is enabled, and Readline is being
|
|
used, history substitutions are not immediately passed to the shell
|
|
parser. Instead, the expanded line is reloaded into the Readline
|
|
editing buffer for further modification. If Readline is being used,
|
|
and the `histreedit' shell option is enabled, a failed history
|
|
expansion will be reloaded into the Readline editing buffer for
|
|
correction. The `-p' option to the `history' builtin command may be
|
|
used to see what a history expansion will do before using it. The `-s'
|
|
option to the `history' builtin may be used to add commands to the end
|
|
of the history list without actually executing them, so that they are
|
|
available for subsequent recall. This is most useful in conjunction
|
|
with Readline.
|
|
|
|
The shell allows control of the various characters used by the
|
|
history expansion mechanism with the `histchars' variable, as explained
|
|
above (*note Bash Variables::). The shell uses the history comment
|
|
character to mark history timestamps when writing the history file.
|
|
|
|
* Menu:
|
|
|
|
* Event Designators:: How to specify which history line to use.
|
|
* Word Designators:: Specifying which words are of interest.
|
|
* Modifiers:: Modifying the results of substitution.
|
|
|
|
|
|
File: bashref.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
|
|
|
|
9.3.1 Event Designators
|
|
-----------------------
|
|
|
|
An event designator is a reference to a command line entry in the
|
|
history list. Unless the reference is absolute, events are relative to
|
|
the current position in the history list.
|
|
|
|
`!'
|
|
Start a history substitution, except when followed by a space, tab,
|
|
the end of the line, `=' or `(' (when the `extglob' shell option
|
|
is enabled using the `shopt' builtin).
|
|
|
|
`!N'
|
|
Refer to command line N.
|
|
|
|
`!-N'
|
|
Refer to the command N lines back.
|
|
|
|
`!!'
|
|
Refer to the previous command. This is a synonym for `!-1'.
|
|
|
|
`!STRING'
|
|
Refer to the most recent command preceding the current position in
|
|
the history list starting with STRING.
|
|
|
|
`!?STRING[?]'
|
|
Refer to the most recent command preceding the current position in
|
|
the history list containing STRING. The trailing `?' may be
|
|
omitted if the STRING is followed immediately by a newline.
|
|
|
|
`^STRING1^STRING2^'
|
|
Quick Substitution. Repeat the last command, replacing STRING1
|
|
with STRING2. Equivalent to `!!:s/STRING1/STRING2/'.
|
|
|
|
`!#'
|
|
The entire command line typed so far.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
|
|
|
|
9.3.2 Word Designators
|
|
----------------------
|
|
|
|
Word designators are used to select desired words from the event. A
|
|
`:' separates the event specification from the word designator. It may
|
|
be omitted if the word designator begins with a `^', `$', `*', `-', or
|
|
`%'. Words are numbered from the beginning of the line, with the first
|
|
word being denoted by 0 (zero). Words are inserted into the current
|
|
line separated by single spaces.
|
|
|
|
For example,
|
|
|
|
`!!'
|
|
designates the preceding command. When you type this, the
|
|
preceding command is repeated in toto.
|
|
|
|
`!!:$'
|
|
designates the last argument of the preceding command. This may be
|
|
shortened to `!$'.
|
|
|
|
`!fi:2'
|
|
designates the second argument of the most recent command starting
|
|
with the letters `fi'.
|
|
|
|
Here are the word designators:
|
|
|
|
`0 (zero)'
|
|
The `0'th word. For many applications, this is the command word.
|
|
|
|
`N'
|
|
The Nth word.
|
|
|
|
`^'
|
|
The first argument; that is, word 1.
|
|
|
|
`$'
|
|
The last argument.
|
|
|
|
`%'
|
|
The word matched by the most recent `?STRING?' search.
|
|
|
|
`X-Y'
|
|
A range of words; `-Y' abbreviates `0-Y'.
|
|
|
|
`*'
|
|
All of the words, except the `0'th. This is a synonym for `1-$'.
|
|
It is not an error to use `*' if there is just one word in the
|
|
event; the empty string is returned in that case.
|
|
|
|
`X*'
|
|
Abbreviates `X-$'
|
|
|
|
`X-'
|
|
Abbreviates `X-$' like `X*', but omits the last word.
|
|
|
|
|
|
If a word designator is supplied without an event specification, the
|
|
previous command is used as the event.
|
|
|
|
|
|
File: bashref.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
|
|
|
|
9.3.3 Modifiers
|
|
---------------
|
|
|
|
After the optional word designator, you can add a sequence of one or
|
|
more of the following modifiers, each preceded by a `:'.
|
|
|
|
`h'
|
|
Remove a trailing pathname component, leaving only the head.
|
|
|
|
`t'
|
|
Remove all leading pathname components, leaving the tail.
|
|
|
|
`r'
|
|
Remove a trailing suffix of the form `.SUFFIX', leaving the
|
|
basename.
|
|
|
|
`e'
|
|
Remove all but the trailing suffix.
|
|
|
|
`p'
|
|
Print the new command but do not execute it.
|
|
|
|
`q'
|
|
Quote the substituted words, escaping further substitutions.
|
|
|
|
`x'
|
|
Quote the substituted words as with `q', but break into words at
|
|
spaces, tabs, and newlines.
|
|
|
|
`s/OLD/NEW/'
|
|
Substitute NEW for the first occurrence of OLD in the event line.
|
|
Any delimiter may be used in place of `/'. The delimiter may be
|
|
quoted in OLD and NEW with a single backslash. If `&' appears in
|
|
NEW, it is replaced by OLD. A single backslash will quote the
|
|
`&'. The final delimiter is optional if it is the last character
|
|
on the input line.
|
|
|
|
`&'
|
|
Repeat the previous substitution.
|
|
|
|
`g'
|
|
`a'
|
|
Cause changes to be applied over the entire event line. Used in
|
|
conjunction with `s', as in `gs/OLD/NEW/', or with `&'.
|
|
|
|
`G'
|
|
Apply the following `s' modifier once to each word in the event.
|
|
|
|
|
|
|
|
File: bashref.info, Node: Installing Bash, Next: Reporting Bugs, Prev: Using History Interactively, Up: Top
|
|
|
|
10 Installing Bash
|
|
******************
|
|
|
|
This chapter provides basic instructions for installing Bash on the
|
|
various supported platforms. The distribution supports the GNU
|
|
operating systems, nearly every version of Unix, and several non-Unix
|
|
systems such as BeOS and Interix. Other independent ports exist for
|
|
MS-DOS, OS/2, and Windows platforms.
|
|
|
|
* Menu:
|
|
|
|
* Basic Installation:: Installation instructions.
|
|
* Compilers and Options:: How to set special options for various
|
|
systems.
|
|
* Compiling For Multiple Architectures:: How to compile Bash for more
|
|
than one kind of system from
|
|
the same source tree.
|
|
* Installation Names:: How to set the various paths used by the installation.
|
|
* Specifying the System Type:: How to configure Bash for a particular system.
|
|
* Sharing Defaults:: How to share default configuration values among GNU
|
|
programs.
|
|
* Operation Controls:: Options recognized by the configuration program.
|
|
* Optional Features:: How to enable and disable optional features when
|
|
building Bash.
|
|
|
|
|
|
File: bashref.info, Node: Basic Installation, Next: Compilers and Options, Up: Installing Bash
|
|
|
|
10.1 Basic Installation
|
|
=======================
|
|
|
|
These are installation instructions for Bash.
|
|
|
|
The simplest way to compile Bash is:
|
|
|
|
1. `cd' to the directory containing the source code and type
|
|
`./configure' to configure Bash for your system. If you're using
|
|
`csh' on an old version of System V, you might need to type `sh
|
|
./configure' instead to prevent `csh' from trying to execute
|
|
`configure' itself.
|
|
|
|
Running `configure' takes some time. While running, it prints
|
|
messages telling which features it is checking for.
|
|
|
|
2. Type `make' to compile Bash and build the `bashbug' bug reporting
|
|
script.
|
|
|
|
3. Optionally, type `make tests' to run the Bash test suite.
|
|
|
|
4. Type `make install' to install `bash' and `bashbug'. This will
|
|
also install the manual pages and Info file.
|
|
|
|
|
|
The `configure' shell script attempts to guess correct values for
|
|
various system-dependent variables used during compilation. It uses
|
|
those values to create a `Makefile' in each directory of the package
|
|
(the top directory, the `builtins', `doc', and `support' directories,
|
|
each directory under `lib', and several others). It also creates a
|
|
`config.h' file containing system-dependent definitions. Finally, it
|
|
creates a shell script named `config.status' that you can run in the
|
|
future to recreate the current configuration, a file `config.cache'
|
|
that saves the results of its tests to speed up reconfiguring, and a
|
|
file `config.log' containing compiler output (useful mainly for
|
|
debugging `configure'). If at some point `config.cache' contains
|
|
results you don't want to keep, you may remove or edit it.
|
|
|
|
To find out more about the options and arguments that the
|
|
`configure' script understands, type
|
|
|
|
bash-2.04$ ./configure --help
|
|
|
|
at the Bash prompt in your Bash source directory.
|
|
|
|
If you need to do unusual things to compile Bash, please try to
|
|
figure out how `configure' could check whether or not to do them, and
|
|
mail diffs or instructions to <bash-maintainers@gnu.org> so they can be
|
|
considered for the next release.
|
|
|
|
The file `configure.ac' is used to create `configure' by a program
|
|
called Autoconf. You only need `configure.ac' if you want to change it
|
|
or regenerate `configure' using a newer version of Autoconf. If you do
|
|
this, make sure you are using Autoconf version 2.50 or newer.
|
|
|
|
You can remove the program binaries and object files from the source
|
|
code directory by typing `make clean'. To also remove the files that
|
|
`configure' created (so you can compile Bash for a different kind of
|
|
computer), type `make distclean'.
|
|
|
|
|
|
File: bashref.info, Node: Compilers and Options, Next: Compiling For Multiple Architectures, Prev: Basic Installation, Up: Installing Bash
|
|
|
|
10.2 Compilers and Options
|
|
==========================
|
|
|
|
Some systems require unusual options for compilation or linking that
|
|
the `configure' script does not know about. You can give `configure'
|
|
initial values for variables by setting them in the environment. Using
|
|
a Bourne-compatible shell, you can do that on the command line like
|
|
this:
|
|
|
|
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
|
|
|
On systems that have the `env' program, you can do it like this:
|
|
|
|
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
|
|
|
The configuration process uses GCC to build Bash if it is available.
|
|
|
|
|
|
File: bashref.info, Node: Compiling For Multiple Architectures, Next: Installation Names, Prev: Compilers and Options, Up: Installing Bash
|
|
|
|
10.3 Compiling For Multiple Architectures
|
|
=========================================
|
|
|
|
You can compile Bash for more than one kind of computer at the same
|
|
time, by placing the object files for each architecture in their own
|
|
directory. To do this, you must use a version of `make' that supports
|
|
the `VPATH' variable, such as GNU `make'. `cd' to the directory where
|
|
you want the object files and executables to go and run the `configure'
|
|
script from the source directory. You may need to supply the
|
|
`--srcdir=PATH' argument to tell `configure' where the source files
|
|
are. `configure' automatically checks for the source code in the
|
|
directory that `configure' is in and in `..'.
|
|
|
|
If you have to use a `make' that does not supports the `VPATH'
|
|
variable, you can compile Bash for one architecture at a time in the
|
|
source code directory. After you have installed Bash for one
|
|
architecture, use `make distclean' before reconfiguring for another
|
|
architecture.
|
|
|
|
Alternatively, if your system supports symbolic links, you can use
|
|
the `support/mkclone' script to create a build tree which has symbolic
|
|
links back to each file in the source directory. Here's an example
|
|
that creates a build directory in the current directory from a source
|
|
directory `/usr/gnu/src/bash-2.0':
|
|
|
|
bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
|
|
|
|
The `mkclone' script requires Bash, so you must have already built Bash
|
|
for at least one architecture before you can create build directories
|
|
for other architectures.
|
|
|
|
|
|
File: bashref.info, Node: Installation Names, Next: Specifying the System Type, Prev: Compiling For Multiple Architectures, Up: Installing Bash
|
|
|
|
10.4 Installation Names
|
|
=======================
|
|
|
|
By default, `make install' will install into `/usr/local/bin',
|
|
`/usr/local/man', etc. You can specify an installation prefix other
|
|
than `/usr/local' by giving `configure' the option `--prefix=PATH', or
|
|
by specifying a value for the `DESTDIR' `make' variable when running
|
|
`make install'.
|
|
|
|
You can specify separate installation prefixes for
|
|
architecture-specific files and architecture-independent files. If you
|
|
give `configure' the option `--exec-prefix=PATH', `make install' will
|
|
use PATH as the prefix for installing programs and libraries.
|
|
Documentation and other data files will still use the regular prefix.
|
|
|
|
|
|
File: bashref.info, Node: Specifying the System Type, Next: Sharing Defaults, Prev: Installation Names, Up: Installing Bash
|
|
|
|
10.5 Specifying the System Type
|
|
===============================
|
|
|
|
There may be some features `configure' can not figure out
|
|
automatically, but need to determine by the type of host Bash will run
|
|
on. Usually `configure' can figure that out, but if it prints a
|
|
message saying it can not guess the host type, give it the
|
|
`--host=TYPE' option. `TYPE' can either be a short name for the system
|
|
type, such as `sun4', or a canonical name with three fields:
|
|
`CPU-COMPANY-SYSTEM' (e.g., `i386-unknown-freebsd4.2').
|
|
|
|
See the file `support/config.sub' for the possible values of each
|
|
field.
|
|
|
|
|
|
File: bashref.info, Node: Sharing Defaults, Next: Operation Controls, Prev: Specifying the System Type, Up: Installing Bash
|
|
|
|
10.6 Sharing Defaults
|
|
=====================
|
|
|
|
If you want to set default values for `configure' scripts to share, you
|
|
can create a site shell script called `config.site' that gives default
|
|
values for variables like `CC', `cache_file', and `prefix'. `configure'
|
|
looks for `PREFIX/share/config.site' if it exists, then
|
|
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
|
`CONFIG_SITE' environment variable to the location of the site script.
|
|
A warning: the Bash `configure' looks for a site script, but not all
|
|
`configure' scripts do.
|
|
|
|
|
|
File: bashref.info, Node: Operation Controls, Next: Optional Features, Prev: Sharing Defaults, Up: Installing Bash
|
|
|
|
10.7 Operation Controls
|
|
=======================
|
|
|
|
`configure' recognizes the following options to control how it operates.
|
|
|
|
`--cache-file=FILE'
|
|
Use and save the results of the tests in FILE instead of
|
|
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
|
debugging `configure'.
|
|
|
|
`--help'
|
|
Print a summary of the options to `configure', and exit.
|
|
|
|
`--quiet'
|
|
`--silent'
|
|
`-q'
|
|
Do not print messages saying which checks are being made.
|
|
|
|
`--srcdir=DIR'
|
|
Look for the Bash source code in directory DIR. Usually
|
|
`configure' can determine that directory automatically.
|
|
|
|
`--version'
|
|
Print the version of Autoconf used to generate the `configure'
|
|
script, and exit.
|
|
|
|
`configure' also accepts some other, not widely used, boilerplate
|
|
options. `configure --help' prints the complete list.
|
|
|
|
|
|
File: bashref.info, Node: Optional Features, Prev: Operation Controls, Up: Installing Bash
|
|
|
|
10.8 Optional Features
|
|
======================
|
|
|
|
The Bash `configure' has a number of `--enable-FEATURE' options, where
|
|
FEATURE indicates an optional part of Bash. There are also several
|
|
`--with-PACKAGE' options, where PACKAGE is something like `bash-malloc'
|
|
or `purify'. To turn off the default use of a package, use
|
|
`--without-PACKAGE'. To configure Bash without a feature that is
|
|
enabled by default, use `--disable-FEATURE'.
|
|
|
|
Here is a complete list of the `--enable-' and `--with-' options
|
|
that the Bash `configure' recognizes.
|
|
|
|
`--with-afs'
|
|
Define if you are using the Andrew File System from Transarc.
|
|
|
|
`--with-bash-malloc'
|
|
Use the Bash version of `malloc' in the directory `lib/malloc'.
|
|
This is not the same `malloc' that appears in GNU libc, but an
|
|
older version originally derived from the 4.2 BSD `malloc'. This
|
|
`malloc' is very fast, but wastes some space on each allocation.
|
|
This option is enabled by default. The `NOTES' file contains a
|
|
list of systems for which this should be turned off, and
|
|
`configure' disables this option automatically for a number of
|
|
systems.
|
|
|
|
`--with-curses'
|
|
Use the curses library instead of the termcap library. This should
|
|
be supplied if your system has an inadequate or incomplete termcap
|
|
database.
|
|
|
|
`--with-gnu-malloc'
|
|
A synonym for `--with-bash-malloc'.
|
|
|
|
`--with-installed-readline[=PREFIX]'
|
|
Define this to make Bash link with a locally-installed version of
|
|
Readline rather than the version in `lib/readline'. This works
|
|
only with Readline 5.0 and later versions. If PREFIX is `yes' or
|
|
not supplied, `configure' uses the values of the make variables
|
|
`includedir' and `libdir', which are subdirectories of `prefix' by
|
|
default, to find the installed version of Readline if it is not in
|
|
the standard system include and library directories. If PREFIX is
|
|
`no', Bash links with the version in `lib/readline'. If PREFIX is
|
|
set to any other value, `configure' treats it as a directory
|
|
pathname and looks for the installed version of Readline in
|
|
subdirectories of that directory (include files in
|
|
PREFIX/`include' and the library in PREFIX/`lib').
|
|
|
|
`--with-purify'
|
|
Define this to use the Purify memory allocation checker from
|
|
Rational Software.
|
|
|
|
`--enable-minimal-config'
|
|
This produces a shell with minimal features, close to the
|
|
historical Bourne shell.
|
|
|
|
There are several `--enable-' options that alter how Bash is
|
|
compiled and linked, rather than changing run-time features.
|
|
|
|
`--enable-largefile'
|
|
Enable support for large files
|
|
(http://www.sas.com/standards/large_file/x_open.20Mar96.html) if
|
|
the operating system requires special compiler options to build
|
|
programs which can access large files. This is enabled by
|
|
default, if the operating system provides large file support.
|
|
|
|
`--enable-profiling'
|
|
This builds a Bash binary that produces profiling information to be
|
|
processed by `gprof' each time it is executed.
|
|
|
|
`--enable-static-link'
|
|
This causes Bash to be linked statically, if `gcc' is being used.
|
|
This could be used to build a version to use as root's shell.
|
|
|
|
The `minimal-config' option can be used to disable all of the
|
|
following options, but it is processed first, so individual options may
|
|
be enabled using `enable-FEATURE'.
|
|
|
|
All of the following options except for `disabled-builtins',
|
|
`directpand-default', and `xpg-echo-default' are enabled by default,
|
|
unless the operating system does not provide the necessary support.
|
|
|
|
`--enable-alias'
|
|
Allow alias expansion and include the `alias' and `unalias'
|
|
builtins (*note Aliases::).
|
|
|
|
`--enable-arith-for-command'
|
|
Include support for the alternate form of the `for' command that
|
|
behaves like the C language `for' statement (*note Looping
|
|
Constructs::).
|
|
|
|
`--enable-array-variables'
|
|
Include support for one-dimensional array shell variables (*note
|
|
Arrays::).
|
|
|
|
`--enable-bang-history'
|
|
Include support for `csh'-like history substitution (*note History
|
|
Interaction::).
|
|
|
|
`--enable-brace-expansion'
|
|
Include `csh'-like brace expansion ( `b{a,b}c' ==> `bac bbc' ).
|
|
See *note Brace Expansion::, for a complete description.
|
|
|
|
`--enable-casemod-attributes'
|
|
Include support for case-modifying attributes in the `declare'
|
|
builtin and assignment statements. Variables with the UPPERCASE
|
|
attribute, for example, will have their values converted to
|
|
uppercase upon assignment.
|
|
|
|
`--enable-casemod-expansion'
|
|
Include support for case-modifying word expansions.
|
|
|
|
`--enable-command-timing'
|
|
Include support for recognizing `time' as a reserved word and for
|
|
displaying timing statistics for the pipeline following `time'
|
|
(*note Pipelines::). This allows pipelines as well as shell
|
|
builtins and functions to be timed.
|
|
|
|
`--enable-cond-command'
|
|
Include support for the `[[' conditional command. (*note
|
|
Conditional Constructs::).
|
|
|
|
`--enable-cond-regexp'
|
|
Include support for matching POSIX regular expressions using the
|
|
`=~' binary operator in the `[[' conditional command. (*note
|
|
Conditional Constructs::).
|
|
|
|
`--enable-coprocesses'
|
|
Include support for coprocesses and the `coproc' reserved word
|
|
(*note Pipelines::).
|
|
|
|
`--enable-debugger'
|
|
Include support for the bash debugger (distributed separately).
|
|
|
|
`--enable-direxpand-default'
|
|
Cause the `direxpand' shell option (*note The Shopt Builtin::) to
|
|
be enabled by default when the shell starts. It is normally
|
|
disabled by default.
|
|
|
|
`--enable-directory-stack'
|
|
Include support for a `csh'-like directory stack and the `pushd',
|
|
`popd', and `dirs' builtins (*note The Directory Stack::).
|
|
|
|
`--enable-disabled-builtins'
|
|
Allow builtin commands to be invoked via `builtin xxx' even after
|
|
`xxx' has been disabled using `enable -n xxx'. See *note Bash
|
|
Builtins::, for details of the `builtin' and `enable' builtin
|
|
commands.
|
|
|
|
`--enable-dparen-arithmetic'
|
|
Include support for the `((...))' command (*note Conditional
|
|
Constructs::).
|
|
|
|
`--enable-extended-glob'
|
|
Include support for the extended pattern matching features
|
|
described above under *note Pattern Matching::.
|
|
|
|
`--enable-extended-glob-default'
|
|
Set the default value of the EXTGLOB shell option described above
|
|
under *note The Shopt Builtin:: to be enabled.
|
|
|
|
`--enable-glob-asciirange-default'
|
|
Set the default value of the GLOBASCIIRANGES shell option described
|
|
above under *note The Shopt Builtin:: to be enabled. This
|
|
controls the behavior of character ranges when used in pattern
|
|
matching bracket expressions.
|
|
|
|
`--enable-help-builtin'
|
|
Include the `help' builtin, which displays help on shell builtins
|
|
and variables (*note Bash Builtins::).
|
|
|
|
`--enable-history'
|
|
Include command history and the `fc' and `history' builtin
|
|
commands (*note Bash History Facilities::).
|
|
|
|
`--enable-job-control'
|
|
This enables the job control features (*note Job Control::), if
|
|
the operating system supports them.
|
|
|
|
`--enable-multibyte'
|
|
This enables support for multibyte characters if the operating
|
|
system provides the necessary support.
|
|
|
|
`--enable-net-redirections'
|
|
This enables the special handling of filenames of the form
|
|
`/dev/tcp/HOST/PORT' and `/dev/udp/HOST/PORT' when used in
|
|
redirections (*note Redirections::).
|
|
|
|
`--enable-process-substitution'
|
|
This enables process substitution (*note Process Substitution::) if
|
|
the operating system provides the necessary support.
|
|
|
|
`--enable-progcomp'
|
|
Enable the programmable completion facilities (*note Programmable
|
|
Completion::). If Readline is not enabled, this option has no
|
|
effect.
|
|
|
|
`--enable-prompt-string-decoding'
|
|
Turn on the interpretation of a number of backslash-escaped
|
|
characters in the `$PS1', `$PS2', `$PS3', and `$PS4' prompt
|
|
strings. See *note Controlling the Prompt::, for a complete list
|
|
of prompt string escape sequences.
|
|
|
|
`--enable-readline'
|
|
Include support for command-line editing and history with the Bash
|
|
version of the Readline library (*note Command Line Editing::).
|
|
|
|
`--enable-restricted'
|
|
Include support for a "restricted shell". If this is enabled,
|
|
Bash, when called as `rbash', enters a restricted mode. See *note
|
|
The Restricted Shell::, for a description of restricted mode.
|
|
|
|
`--enable-select'
|
|
Include the `select' compound command, which allows the generation
|
|
of simple menus (*note Conditional Constructs::).
|
|
|
|
`--enable-separate-helpfiles'
|
|
Use external files for the documentation displayed by the `help'
|
|
builtin instead of storing the text internally.
|
|
|
|
`--enable-single-help-strings'
|
|
Store the text displayed by the `help' builtin as a single string
|
|
for each help topic. This aids in translating the text to
|
|
different languages. You may need to disable this if your
|
|
compiler cannot handle very long string literals.
|
|
|
|
`--enable-strict-posix-default'
|
|
Make Bash POSIX-conformant by default (*note Bash POSIX Mode::).
|
|
|
|
`--enable-usg-echo-default'
|
|
A synonym for `--enable-xpg-echo-default'.
|
|
|
|
`--enable-xpg-echo-default'
|
|
Make the `echo' builtin expand backslash-escaped characters by
|
|
default, without requiring the `-e' option. This sets the default
|
|
value of the `xpg_echo' shell option to `on', which makes the Bash
|
|
`echo' behave more like the version specified in the Single Unix
|
|
Specification, version 3. *Note Bash Builtins::, for a
|
|
description of the escape sequences that `echo' recognizes.
|
|
|
|
The file `config-top.h' contains C Preprocessor `#define' statements
|
|
for options which are not settable from `configure'. Some of these are
|
|
not meant to be changed; beware of the consequences if you do. Read
|
|
the comments associated with each definition for more information about
|
|
its effect.
|
|
|
|
|
|
File: bashref.info, Node: Reporting Bugs, Next: Major Differences From The Bourne Shell, Prev: Installing Bash, Up: Top
|
|
|
|
Appendix A Reporting Bugs
|
|
*************************
|
|
|
|
Please report all bugs you find in Bash. But first, you should make
|
|
sure that it really is a bug, and that it appears in the latest version
|
|
of Bash. The latest version of Bash is always available for FTP from
|
|
`ftp://ftp.gnu.org/pub/gnu/bash/'.
|
|
|
|
Once you have determined that a bug actually exists, use the
|
|
`bashbug' command to submit a bug report. If you have a fix, you are
|
|
encouraged to mail that as well! Suggestions and `philosophical' bug
|
|
reports may be mailed to <bug-bash@gnu.org> or posted to the Usenet
|
|
newsgroup `gnu.bash.bug'.
|
|
|
|
All bug reports should include:
|
|
* The version number of Bash.
|
|
|
|
* The hardware and operating system.
|
|
|
|
* The compiler used to compile Bash.
|
|
|
|
* A description of the bug behaviour.
|
|
|
|
* A short script or `recipe' which exercises the bug and may be used
|
|
to reproduce it.
|
|
|
|
`bashbug' inserts the first three items automatically into the template
|
|
it provides for filing a bug report.
|
|
|
|
Please send all reports concerning this manual to <bug-bash@gnu.org>.
|
|
|
|
|
|
File: bashref.info, Node: Major Differences From The Bourne Shell, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
|
|
|
|
Appendix B Major Differences From The Bourne Shell
|
|
**************************************************
|
|
|
|
Bash implements essentially the same grammar, parameter and variable
|
|
expansion, redirection, and quoting as the Bourne Shell. Bash uses the
|
|
POSIX standard as the specification of how these features are to be
|
|
implemented. There are some differences between the traditional Bourne
|
|
shell and Bash; this section quickly details the differences of
|
|
significance. A number of these differences are explained in greater
|
|
depth in previous sections. This section uses the version of `sh'
|
|
included in SVR4.2 (the last version of the historical Bourne shell) as
|
|
the baseline reference.
|
|
|
|
* Bash is POSIX-conformant, even where the POSIX specification
|
|
differs from traditional `sh' behavior (*note Bash POSIX Mode::).
|
|
|
|
* Bash has multi-character invocation options (*note Invoking
|
|
Bash::).
|
|
|
|
* Bash has command-line editing (*note Command Line Editing::) and
|
|
the `bind' builtin.
|
|
|
|
* Bash provides a programmable word completion mechanism (*note
|
|
Programmable Completion::), and builtin commands `complete',
|
|
`compgen', and `compopt', to manipulate it.
|
|
|
|
* Bash has command history (*note Bash History Facilities::) and the
|
|
`history' and `fc' builtins to manipulate it. The Bash history
|
|
list maintains timestamp information and uses the value of the
|
|
`HISTTIMEFORMAT' variable to display it.
|
|
|
|
* Bash implements `csh'-like history expansion (*note History
|
|
Interaction::).
|
|
|
|
* Bash has one-dimensional array variables (*note Arrays::), and the
|
|
appropriate variable expansions and assignment syntax to use them.
|
|
Several of the Bash builtins take options to act on arrays. Bash
|
|
provides a number of built-in array variables.
|
|
|
|
* The `$'...'' quoting syntax, which expands ANSI-C
|
|
backslash-escaped characters in the text between the single quotes,
|
|
is supported (*note ANSI-C Quoting::).
|
|
|
|
* Bash supports the `$"..."' quoting syntax to do locale-specific
|
|
translation of the characters between the double quotes. The
|
|
`-D', `--dump-strings', and `--dump-po-strings' invocation options
|
|
list the translatable strings found in a script (*note Locale
|
|
Translation::).
|
|
|
|
* Bash implements the `!' keyword to negate the return value of a
|
|
pipeline (*note Pipelines::). Very useful when an `if' statement
|
|
needs to act only if a test fails. The Bash `-o pipefail' option
|
|
to `set' will cause a pipeline to return a failure status if any
|
|
command fails.
|
|
|
|
* Bash has the `time' reserved word and command timing (*note
|
|
Pipelines::). The display of the timing statistics may be
|
|
controlled with the `TIMEFORMAT' variable.
|
|
|
|
* Bash implements the `for (( EXPR1 ; EXPR2 ; EXPR3 ))' arithmetic
|
|
for command, similar to the C language (*note Looping
|
|
Constructs::).
|
|
|
|
* Bash includes the `select' compound command, which allows the
|
|
generation of simple menus (*note Conditional Constructs::).
|
|
|
|
* Bash includes the `[[' compound command, which makes conditional
|
|
testing part of the shell grammar (*note Conditional
|
|
Constructs::), including optional regular expression matching.
|
|
|
|
* Bash provides optional case-insensitive matching for the `case' and
|
|
`[[' constructs.
|
|
|
|
* Bash includes brace expansion (*note Brace Expansion::) and tilde
|
|
expansion (*note Tilde Expansion::).
|
|
|
|
* Bash implements command aliases and the `alias' and `unalias'
|
|
builtins (*note Aliases::).
|
|
|
|
* Bash provides shell arithmetic, the `((' compound command (*note
|
|
Conditional Constructs::), and arithmetic expansion (*note Shell
|
|
Arithmetic::).
|
|
|
|
* Variables present in the shell's initial environment are
|
|
automatically exported to child processes. The Bourne shell does
|
|
not normally do this unless the variables are explicitly marked
|
|
using the `export' command.
|
|
|
|
* Bash supports the `+=' assignment operator, which appends to the
|
|
value of the variable named on the left hand side.
|
|
|
|
* Bash includes the POSIX pattern removal `%', `#', `%%' and `##'
|
|
expansions to remove leading or trailing substrings from variable
|
|
values (*note Shell Parameter Expansion::).
|
|
|
|
* The expansion `${#xx}', which returns the length of `${xx}', is
|
|
supported (*note Shell Parameter Expansion::).
|
|
|
|
* The expansion `${var:'OFFSET`[:'LENGTH`]}', which expands to the
|
|
substring of `var''s value of length LENGTH, beginning at OFFSET,
|
|
is present (*note Shell Parameter Expansion::).
|
|
|
|
* The expansion `${var/[/]'PATTERN`[/'REPLACEMENT`]}', which matches
|
|
PATTERN and replaces it with REPLACEMENT in the value of `var', is
|
|
available (*note Shell Parameter Expansion::).
|
|
|
|
* The expansion `${!PREFIX*}' expansion, which expands to the names
|
|
of all shell variables whose names begin with PREFIX, is available
|
|
(*note Shell Parameter Expansion::).
|
|
|
|
* Bash has INDIRECT variable expansion using `${!word}' (*note Shell
|
|
Parameter Expansion::).
|
|
|
|
* Bash can expand positional parameters beyond `$9' using `${NUM}'.
|
|
|
|
* The POSIX `$()' form of command substitution is implemented (*note
|
|
Command Substitution::), and preferred to the Bourne shell's ```'
|
|
(which is also implemented for backwards compatibility).
|
|
|
|
* Bash has process substitution (*note Process Substitution::).
|
|
|
|
* Bash automatically assigns variables that provide information
|
|
about the current user (`UID', `EUID', and `GROUPS'), the current
|
|
host (`HOSTTYPE', `OSTYPE', `MACHTYPE', and `HOSTNAME'), and the
|
|
instance of Bash that is running (`BASH', `BASH_VERSION', and
|
|
`BASH_VERSINFO'). *Note Bash Variables::, for details.
|
|
|
|
* The `IFS' variable is used to split only the results of expansion,
|
|
not all words (*note Word Splitting::). This closes a
|
|
longstanding shell security hole.
|
|
|
|
* The filename expansion bracket expression code uses `!' and `^' to
|
|
negate the set of characters between the brackets. The Bourne
|
|
shell uses only `!'.
|
|
|
|
* Bash implements the full set of POSIX filename expansion operators,
|
|
including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING
|
|
SYMBOLS (*note Filename Expansion::).
|
|
|
|
* Bash implements extended pattern matching features when the
|
|
`extglob' shell option is enabled (*note Pattern Matching::).
|
|
|
|
* It is possible to have a variable and a function with the same
|
|
name; `sh' does not separate the two name spaces.
|
|
|
|
* Bash functions are permitted to have local variables using the
|
|
`local' builtin, and thus useful recursive functions may be written
|
|
(*note Bash Builtins::).
|
|
|
|
* Variable assignments preceding commands affect only that command,
|
|
even builtins and functions (*note Environment::). In `sh', all
|
|
variable assignments preceding commands are global unless the
|
|
command is executed from the file system.
|
|
|
|
* Bash performs filename expansion on filenames specified as operands
|
|
to input and output redirection operators (*note Redirections::).
|
|
|
|
* Bash contains the `<>' redirection operator, allowing a file to be
|
|
opened for both reading and writing, and the `&>' redirection
|
|
operator, for directing standard output and standard error to the
|
|
same file (*note Redirections::).
|
|
|
|
* Bash includes the `<<<' redirection operator, allowing a string to
|
|
be used as the standard input to a command.
|
|
|
|
* Bash implements the `[n]<&WORD' and `[n]>&WORD' redirection
|
|
operators, which move one file descriptor to another.
|
|
|
|
* Bash treats a number of filenames specially when they are used in
|
|
redirection operators (*note Redirections::).
|
|
|
|
* Bash can open network connections to arbitrary machines and
|
|
services with the redirection operators (*note Redirections::).
|
|
|
|
* The `noclobber' option is available to avoid overwriting existing
|
|
files with output redirection (*note The Set Builtin::). The `>|'
|
|
redirection operator may be used to override `noclobber'.
|
|
|
|
* The Bash `cd' and `pwd' builtins (*note Bourne Shell Builtins::)
|
|
each take `-L' and `-P' options to switch between logical and
|
|
physical modes.
|
|
|
|
* Bash allows a function to override a builtin with the same name,
|
|
and provides access to that builtin's functionality within the
|
|
function via the `builtin' and `command' builtins (*note Bash
|
|
Builtins::).
|
|
|
|
* The `command' builtin allows selective disabling of functions when
|
|
command lookup is performed (*note Bash Builtins::).
|
|
|
|
* Individual builtins may be enabled or disabled using the `enable'
|
|
builtin (*note Bash Builtins::).
|
|
|
|
* The Bash `exec' builtin takes additional options that allow users
|
|
to control the contents of the environment passed to the executed
|
|
command, and what the zeroth argument to the command is to be
|
|
(*note Bourne Shell Builtins::).
|
|
|
|
* Shell functions may be exported to children via the environment
|
|
using `export -f' (*note Shell Functions::).
|
|
|
|
* The Bash `export', `readonly', and `declare' builtins can take a
|
|
`-f' option to act on shell functions, a `-p' option to display
|
|
variables with various attributes set in a format that can be used
|
|
as shell input, a `-n' option to remove various variable
|
|
attributes, and `name=value' arguments to set variable attributes
|
|
and values simultaneously.
|
|
|
|
* The Bash `hash' builtin allows a name to be associated with an
|
|
arbitrary filename, even when that filename cannot be found by
|
|
searching the `$PATH', using `hash -p' (*note Bourne Shell
|
|
Builtins::).
|
|
|
|
* Bash includes a `help' builtin for quick reference to shell
|
|
facilities (*note Bash Builtins::).
|
|
|
|
* The `printf' builtin is available to display formatted output
|
|
(*note Bash Builtins::).
|
|
|
|
* The Bash `read' builtin (*note Bash Builtins::) will read a line
|
|
ending in `\' with the `-r' option, and will use the `REPLY'
|
|
variable as a default if no non-option arguments are supplied.
|
|
The Bash `read' builtin also accepts a prompt string with the `-p'
|
|
option and will use Readline to obtain the line when given the
|
|
`-e' option. The `read' builtin also has additional options to
|
|
control input: the `-s' option will turn off echoing of input
|
|
characters as they are read, the `-t' option will allow `read' to
|
|
time out if input does not arrive within a specified number of
|
|
seconds, the `-n' option will allow reading only a specified
|
|
number of characters rather than a full line, and the `-d' option
|
|
will read until a particular character rather than newline.
|
|
|
|
* The `return' builtin may be used to abort execution of scripts
|
|
executed with the `.' or `source' builtins (*note Bourne Shell
|
|
Builtins::).
|
|
|
|
* Bash includes the `shopt' builtin, for finer control of shell
|
|
optional capabilities (*note The Shopt Builtin::), and allows
|
|
these options to be set and unset at shell invocation (*note
|
|
Invoking Bash::).
|
|
|
|
* Bash has much more optional behavior controllable with the `set'
|
|
builtin (*note The Set Builtin::).
|
|
|
|
* The `-x' (`xtrace') option displays commands other than simple
|
|
commands when performing an execution trace (*note The Set
|
|
Builtin::).
|
|
|
|
* The `test' builtin (*note Bourne Shell Builtins::) is slightly
|
|
different, as it implements the POSIX algorithm, which specifies
|
|
the behavior based on the number of arguments.
|
|
|
|
* Bash includes the `caller' builtin, which displays the context of
|
|
any active subroutine call (a shell function or a script executed
|
|
with the `.' or `source' builtins). This supports the bash
|
|
debugger.
|
|
|
|
* The `trap' builtin (*note Bourne Shell Builtins::) allows a
|
|
`DEBUG' pseudo-signal specification, similar to `EXIT'. Commands
|
|
specified with a `DEBUG' trap are executed before every simple
|
|
command, `for' command, `case' command, `select' command, every
|
|
arithmetic `for' command, and before the first command executes in
|
|
a shell function. The `DEBUG' trap is not inherited by shell
|
|
functions unless the function has been given the `trace' attribute
|
|
or the `functrace' option has been enabled using the `shopt'
|
|
builtin. The `extdebug' shell option has additional effects on the
|
|
`DEBUG' trap.
|
|
|
|
The `trap' builtin (*note Bourne Shell Builtins::) allows an `ERR'
|
|
pseudo-signal specification, similar to `EXIT' and `DEBUG'.
|
|
Commands specified with an `ERR' trap are executed after a simple
|
|
command fails, with a few exceptions. The `ERR' trap is not
|
|
inherited by shell functions unless the `-o errtrace' option to
|
|
the `set' builtin is enabled.
|
|
|
|
The `trap' builtin (*note Bourne Shell Builtins::) allows a
|
|
`RETURN' pseudo-signal specification, similar to `EXIT' and
|
|
`DEBUG'. Commands specified with an `RETURN' trap are executed
|
|
before execution resumes after a shell function or a shell script
|
|
executed with `.' or `source' returns. The `RETURN' trap is not
|
|
inherited by shell functions unless the function has been given
|
|
the `trace' attribute or the `functrace' option has been enabled
|
|
using the `shopt' builtin.
|
|
|
|
* The Bash `type' builtin is more extensive and gives more
|
|
information about the names it finds (*note Bash Builtins::).
|
|
|
|
* The Bash `umask' builtin permits a `-p' option to cause the output
|
|
to be displayed in the form of a `umask' command that may be
|
|
reused as input (*note Bourne Shell Builtins::).
|
|
|
|
* Bash implements a `csh'-like directory stack, and provides the
|
|
`pushd', `popd', and `dirs' builtins to manipulate it (*note The
|
|
Directory Stack::). Bash also makes the directory stack visible
|
|
as the value of the `DIRSTACK' shell variable.
|
|
|
|
* Bash interprets special backslash-escaped characters in the prompt
|
|
strings when interactive (*note Controlling the Prompt::).
|
|
|
|
* The Bash restricted mode is more useful (*note The Restricted
|
|
Shell::); the SVR4.2 shell restricted mode is too limited.
|
|
|
|
* The `disown' builtin can remove a job from the internal shell job
|
|
table (*note Job Control Builtins::) or suppress the sending of
|
|
`SIGHUP' to a job when the shell exits as the result of a `SIGHUP'.
|
|
|
|
* Bash includes a number of features to support a separate debugger
|
|
for shell scripts.
|
|
|
|
* The SVR4.2 shell has two privilege-related builtins (`mldmode' and
|
|
`priv') not present in Bash.
|
|
|
|
* Bash does not have the `stop' or `newgrp' builtins.
|
|
|
|
* Bash does not use the `SHACCT' variable or perform shell
|
|
accounting.
|
|
|
|
* The SVR4.2 `sh' uses a `TIMEOUT' variable like Bash uses `TMOUT'.
|
|
|
|
|
|
More features unique to Bash may be found in *note Bash Features::.
|
|
|
|
B.1 Implementation Differences From The SVR4.2 Shell
|
|
====================================================
|
|
|
|
Since Bash is a completely new implementation, it does not suffer from
|
|
many of the limitations of the SVR4.2 shell. For instance:
|
|
|
|
* Bash does not fork a subshell when redirecting into or out of a
|
|
shell control structure such as an `if' or `while' statement.
|
|
|
|
* Bash does not allow unbalanced quotes. The SVR4.2 shell will
|
|
silently insert a needed closing quote at `EOF' under certain
|
|
circumstances. This can be the cause of some hard-to-find errors.
|
|
|
|
* The SVR4.2 shell uses a baroque memory management scheme based on
|
|
trapping `SIGSEGV'. If the shell is started from a process with
|
|
`SIGSEGV' blocked (e.g., by using the `system()' C library
|
|
function call), it misbehaves badly.
|
|
|
|
* In a questionable attempt at security, the SVR4.2 shell, when
|
|
invoked without the `-p' option, will alter its real and effective
|
|
UID and GID if they are less than some magic threshold value,
|
|
commonly 100. This can lead to unexpected results.
|
|
|
|
* The SVR4.2 shell does not allow users to trap `SIGSEGV',
|
|
`SIGALRM', or `SIGCHLD'.
|
|
|
|
* The SVR4.2 shell does not allow the `IFS', `MAILCHECK', `PATH',
|
|
`PS1', or `PS2' variables to be unset.
|
|
|
|
* The SVR4.2 shell treats `^' as the undocumented equivalent of `|'.
|
|
|
|
* Bash allows multiple option arguments when it is invoked (`-x -v');
|
|
the SVR4.2 shell allows only one option argument (`-xv'). In
|
|
fact, some versions of the shell dump core if the second argument
|
|
begins with a `-'.
|
|
|
|
* The SVR4.2 shell exits a script if any builtin fails; Bash exits a
|
|
script only if one of the POSIX special builtins fails, and only
|
|
for certain failures, as enumerated in the POSIX standard.
|
|
|
|
* The SVR4.2 shell behaves differently when invoked as `jsh' (it
|
|
turns on job control).
|
|
|
|
|
|
File: bashref.info, Node: GNU Free Documentation License, Next: Indexes, Prev: Major Differences From The Bourne Shell, Up: Top
|
|
|
|
Appendix C GNU Free Documentation License
|
|
*****************************************
|
|
|
|
Version 1.3, 3 November 2008
|
|
|
|
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
|
|
`http://fsf.org/'
|
|
|
|
Everyone is permitted to copy and distribute verbatim copies
|
|
of this license document, but changing it is not allowed.
|
|
|
|
0. PREAMBLE
|
|
|
|
The purpose of this License is to make a manual, textbook, or other
|
|
functional and useful document "free" in the sense of freedom: to
|
|
assure everyone the effective freedom to copy and redistribute it,
|
|
with or without modifying it, either commercially or
|
|
noncommercially. Secondarily, this License preserves for the
|
|
author and publisher a way to get credit for their work, while not
|
|
being considered responsible for modifications made by others.
|
|
|
|
This License is a kind of "copyleft", which means that derivative
|
|
works of the document must themselves be free in the same sense.
|
|
It complements the GNU General Public License, which is a copyleft
|
|
license designed for free software.
|
|
|
|
We have designed this License in order to use it for manuals for
|
|
free software, because free software needs free documentation: a
|
|
free program should come with manuals providing the same freedoms
|
|
that the software does. But this License is not limited to
|
|
software manuals; it can be used for any textual work, regardless
|
|
of subject matter or whether it is published as a printed book.
|
|
We recommend this License principally for works whose purpose is
|
|
instruction or reference.
|
|
|
|
1. APPLICABILITY AND DEFINITIONS
|
|
|
|
This License applies to any manual or other work, in any medium,
|
|
that contains a notice placed by the copyright holder saying it
|
|
can be distributed under the terms of this License. Such a notice
|
|
grants a world-wide, royalty-free license, unlimited in duration,
|
|
to use that work under the conditions stated herein. The
|
|
"Document", below, refers to any such manual or work. Any member
|
|
of the public is a licensee, and is addressed as "you". You
|
|
accept the license if you copy, modify or distribute the work in a
|
|
way requiring permission under copyright law.
|
|
|
|
A "Modified Version" of the Document means any work containing the
|
|
Document or a portion of it, either copied verbatim, or with
|
|
modifications and/or translated into another language.
|
|
|
|
A "Secondary Section" is a named appendix or a front-matter section
|
|
of the Document that deals exclusively with the relationship of the
|
|
publishers or authors of the Document to the Document's overall
|
|
subject (or to related matters) and contains nothing that could
|
|
fall directly within that overall subject. (Thus, if the Document
|
|
is in part a textbook of mathematics, a Secondary Section may not
|
|
explain any mathematics.) The relationship could be a matter of
|
|
historical connection with the subject or with related matters, or
|
|
of legal, commercial, philosophical, ethical or political position
|
|
regarding them.
|
|
|
|
The "Invariant Sections" are certain Secondary Sections whose
|
|
titles are designated, as being those of Invariant Sections, in
|
|
the notice that says that the Document is released under this
|
|
License. If a section does not fit the above definition of
|
|
Secondary then it is not allowed to be designated as Invariant.
|
|
The Document may contain zero Invariant Sections. If the Document
|
|
does not identify any Invariant Sections then there are none.
|
|
|
|
The "Cover Texts" are certain short passages of text that are
|
|
listed, as Front-Cover Texts or Back-Cover Texts, in the notice
|
|
that says that the Document is released under this License. A
|
|
Front-Cover Text may be at most 5 words, and a Back-Cover Text may
|
|
be at most 25 words.
|
|
|
|
A "Transparent" copy of the Document means a machine-readable copy,
|
|
represented in a format whose specification is available to the
|
|
general public, that is suitable for revising the document
|
|
straightforwardly with generic text editors or (for images
|
|
composed of pixels) generic paint programs or (for drawings) some
|
|
widely available drawing editor, and that is suitable for input to
|
|
text formatters or for automatic translation to a variety of
|
|
formats suitable for input to text formatters. A copy made in an
|
|
otherwise Transparent file format whose markup, or absence of
|
|
markup, has been arranged to thwart or discourage subsequent
|
|
modification by readers is not Transparent. An image format is
|
|
not Transparent if used for any substantial amount of text. A
|
|
copy that is not "Transparent" is called "Opaque".
|
|
|
|
Examples of suitable formats for Transparent copies include plain
|
|
ASCII without markup, Texinfo input format, LaTeX input format,
|
|
SGML or XML using a publicly available DTD, and
|
|
standard-conforming simple HTML, PostScript or PDF designed for
|
|
human modification. Examples of transparent image formats include
|
|
PNG, XCF and JPG. Opaque formats include proprietary formats that
|
|
can be read and edited only by proprietary word processors, SGML or
|
|
XML for which the DTD and/or processing tools are not generally
|
|
available, and the machine-generated HTML, PostScript or PDF
|
|
produced by some word processors for output purposes only.
|
|
|
|
The "Title Page" means, for a printed book, the title page itself,
|
|
plus such following pages as are needed to hold, legibly, the
|
|
material this License requires to appear in the title page. For
|
|
works in formats which do not have any title page as such, "Title
|
|
Page" means the text near the most prominent appearance of the
|
|
work's title, preceding the beginning of the body of the text.
|
|
|
|
The "publisher" means any person or entity that distributes copies
|
|
of the Document to the public.
|
|
|
|
A section "Entitled XYZ" means a named subunit of the Document
|
|
whose title either is precisely XYZ or contains XYZ in parentheses
|
|
following text that translates XYZ in another language. (Here XYZ
|
|
stands for a specific section name mentioned below, such as
|
|
"Acknowledgements", "Dedications", "Endorsements", or "History".)
|
|
To "Preserve the Title" of such a section when you modify the
|
|
Document means that it remains a section "Entitled XYZ" according
|
|
to this definition.
|
|
|
|
The Document may include Warranty Disclaimers next to the notice
|
|
which states that this License applies to the Document. These
|
|
Warranty Disclaimers are considered to be included by reference in
|
|
this License, but only as regards disclaiming warranties: any other
|
|
implication that these Warranty Disclaimers may have is void and
|
|
has no effect on the meaning of this License.
|
|
|
|
2. VERBATIM COPYING
|
|
|
|
You may copy and distribute the Document in any medium, either
|
|
commercially or noncommercially, provided that this License, the
|
|
copyright notices, and the license notice saying this License
|
|
applies to the Document are reproduced in all copies, and that you
|
|
add no other conditions whatsoever to those of this License. You
|
|
may not use technical measures to obstruct or control the reading
|
|
or further copying of the copies you make or distribute. However,
|
|
you may accept compensation in exchange for copies. If you
|
|
distribute a large enough number of copies you must also follow
|
|
the conditions in section 3.
|
|
|
|
You may also lend copies, under the same conditions stated above,
|
|
and you may publicly display copies.
|
|
|
|
3. COPYING IN QUANTITY
|
|
|
|
If you publish printed copies (or copies in media that commonly
|
|
have printed covers) of the Document, numbering more than 100, and
|
|
the Document's license notice requires Cover Texts, you must
|
|
enclose the copies in covers that carry, clearly and legibly, all
|
|
these Cover Texts: Front-Cover Texts on the front cover, and
|
|
Back-Cover Texts on the back cover. Both covers must also clearly
|
|
and legibly identify you as the publisher of these copies. The
|
|
front cover must present the full title with all words of the
|
|
title equally prominent and visible. You may add other material
|
|
on the covers in addition. Copying with changes limited to the
|
|
covers, as long as they preserve the title of the Document and
|
|
satisfy these conditions, can be treated as verbatim copying in
|
|
other respects.
|
|
|
|
If the required texts for either cover are too voluminous to fit
|
|
legibly, you should put the first ones listed (as many as fit
|
|
reasonably) on the actual cover, and continue the rest onto
|
|
adjacent pages.
|
|
|
|
If you publish or distribute Opaque copies of the Document
|
|
numbering more than 100, you must either include a
|
|
machine-readable Transparent copy along with each Opaque copy, or
|
|
state in or with each Opaque copy a computer-network location from
|
|
which the general network-using public has access to download
|
|
using public-standard network protocols a complete Transparent
|
|
copy of the Document, free of added material. If you use the
|
|
latter option, you must take reasonably prudent steps, when you
|
|
begin distribution of Opaque copies in quantity, to ensure that
|
|
this Transparent copy will remain thus accessible at the stated
|
|
location until at least one year after the last time you
|
|
distribute an Opaque copy (directly or through your agents or
|
|
retailers) of that edition to the public.
|
|
|
|
It is requested, but not required, that you contact the authors of
|
|
the Document well before redistributing any large number of
|
|
copies, to give them a chance to provide you with an updated
|
|
version of the Document.
|
|
|
|
4. MODIFICATIONS
|
|
|
|
You may copy and distribute a Modified Version of the Document
|
|
under the conditions of sections 2 and 3 above, provided that you
|
|
release the Modified Version under precisely this License, with
|
|
the Modified Version filling the role of the Document, thus
|
|
licensing distribution and modification of the Modified Version to
|
|
whoever possesses a copy of it. In addition, you must do these
|
|
things in the Modified Version:
|
|
|
|
A. Use in the Title Page (and on the covers, if any) a title
|
|
distinct from that of the Document, and from those of
|
|
previous versions (which should, if there were any, be listed
|
|
in the History section of the Document). You may use the
|
|
same title as a previous version if the original publisher of
|
|
that version gives permission.
|
|
|
|
B. List on the Title Page, as authors, one or more persons or
|
|
entities responsible for authorship of the modifications in
|
|
the Modified Version, together with at least five of the
|
|
principal authors of the Document (all of its principal
|
|
authors, if it has fewer than five), unless they release you
|
|
from this requirement.
|
|
|
|
C. State on the Title page the name of the publisher of the
|
|
Modified Version, as the publisher.
|
|
|
|
D. Preserve all the copyright notices of the Document.
|
|
|
|
E. Add an appropriate copyright notice for your modifications
|
|
adjacent to the other copyright notices.
|
|
|
|
F. Include, immediately after the copyright notices, a license
|
|
notice giving the public permission to use the Modified
|
|
Version under the terms of this License, in the form shown in
|
|
the Addendum below.
|
|
|
|
G. Preserve in that license notice the full lists of Invariant
|
|
Sections and required Cover Texts given in the Document's
|
|
license notice.
|
|
|
|
H. Include an unaltered copy of this License.
|
|
|
|
I. Preserve the section Entitled "History", Preserve its Title,
|
|
and add to it an item stating at least the title, year, new
|
|
authors, and publisher of the Modified Version as given on
|
|
the Title Page. If there is no section Entitled "History" in
|
|
the Document, create one stating the title, year, authors,
|
|
and publisher of the Document as given on its Title Page,
|
|
then add an item describing the Modified Version as stated in
|
|
the previous sentence.
|
|
|
|
J. Preserve the network location, if any, given in the Document
|
|
for public access to a Transparent copy of the Document, and
|
|
likewise the network locations given in the Document for
|
|
previous versions it was based on. These may be placed in
|
|
the "History" section. You may omit a network location for a
|
|
work that was published at least four years before the
|
|
Document itself, or if the original publisher of the version
|
|
it refers to gives permission.
|
|
|
|
K. For any section Entitled "Acknowledgements" or "Dedications",
|
|
Preserve the Title of the section, and preserve in the
|
|
section all the substance and tone of each of the contributor
|
|
acknowledgements and/or dedications given therein.
|
|
|
|
L. Preserve all the Invariant Sections of the Document,
|
|
unaltered in their text and in their titles. Section numbers
|
|
or the equivalent are not considered part of the section
|
|
titles.
|
|
|
|
M. Delete any section Entitled "Endorsements". Such a section
|
|
may not be included in the Modified Version.
|
|
|
|
N. Do not retitle any existing section to be Entitled
|
|
"Endorsements" or to conflict in title with any Invariant
|
|
Section.
|
|
|
|
O. Preserve any Warranty Disclaimers.
|
|
|
|
If the Modified Version includes new front-matter sections or
|
|
appendices that qualify as Secondary Sections and contain no
|
|
material copied from the Document, you may at your option
|
|
designate some or all of these sections as invariant. To do this,
|
|
add their titles to the list of Invariant Sections in the Modified
|
|
Version's license notice. These titles must be distinct from any
|
|
other section titles.
|
|
|
|
You may add a section Entitled "Endorsements", provided it contains
|
|
nothing but endorsements of your Modified Version by various
|
|
parties--for example, statements of peer review or that the text
|
|
has been approved by an organization as the authoritative
|
|
definition of a standard.
|
|
|
|
You may add a passage of up to five words as a Front-Cover Text,
|
|
and a passage of up to 25 words as a Back-Cover Text, to the end
|
|
of the list of Cover Texts in the Modified Version. Only one
|
|
passage of Front-Cover Text and one of Back-Cover Text may be
|
|
added by (or through arrangements made by) any one entity. If the
|
|
Document already includes a cover text for the same cover,
|
|
previously added by you or by arrangement made by the same entity
|
|
you are acting on behalf of, you may not add another; but you may
|
|
replace the old one, on explicit permission from the previous
|
|
publisher that added the old one.
|
|
|
|
The author(s) and publisher(s) of the Document do not by this
|
|
License give permission to use their names for publicity for or to
|
|
assert or imply endorsement of any Modified Version.
|
|
|
|
5. COMBINING DOCUMENTS
|
|
|
|
You may combine the Document with other documents released under
|
|
this License, under the terms defined in section 4 above for
|
|
modified versions, provided that you include in the combination
|
|
all of the Invariant Sections of all of the original documents,
|
|
unmodified, and list them all as Invariant Sections of your
|
|
combined work in its license notice, and that you preserve all
|
|
their Warranty Disclaimers.
|
|
|
|
The combined work need only contain one copy of this License, and
|
|
multiple identical Invariant Sections may be replaced with a single
|
|
copy. If there are multiple Invariant Sections with the same name
|
|
but different contents, make the title of each such section unique
|
|
by adding at the end of it, in parentheses, the name of the
|
|
original author or publisher of that section if known, or else a
|
|
unique number. Make the same adjustment to the section titles in
|
|
the list of Invariant Sections in the license notice of the
|
|
combined work.
|
|
|
|
In the combination, you must combine any sections Entitled
|
|
"History" in the various original documents, forming one section
|
|
Entitled "History"; likewise combine any sections Entitled
|
|
"Acknowledgements", and any sections Entitled "Dedications". You
|
|
must delete all sections Entitled "Endorsements."
|
|
|
|
6. COLLECTIONS OF DOCUMENTS
|
|
|
|
You may make a collection consisting of the Document and other
|
|
documents released under this License, and replace the individual
|
|
copies of this License in the various documents with a single copy
|
|
that is included in the collection, provided that you follow the
|
|
rules of this License for verbatim copying of each of the
|
|
documents in all other respects.
|
|
|
|
You may extract a single document from such a collection, and
|
|
distribute it individually under this License, provided you insert
|
|
a copy of this License into the extracted document, and follow
|
|
this License in all other respects regarding verbatim copying of
|
|
that document.
|
|
|
|
7. AGGREGATION WITH INDEPENDENT WORKS
|
|
|
|
A compilation of the Document or its derivatives with other
|
|
separate and independent documents or works, in or on a volume of
|
|
a storage or distribution medium, is called an "aggregate" if the
|
|
copyright resulting from the compilation is not used to limit the
|
|
legal rights of the compilation's users beyond what the individual
|
|
works permit. When the Document is included in an aggregate, this
|
|
License does not apply to the other works in the aggregate which
|
|
are not themselves derivative works of the Document.
|
|
|
|
If the Cover Text requirement of section 3 is applicable to these
|
|
copies of the Document, then if the Document is less than one half
|
|
of the entire aggregate, the Document's Cover Texts may be placed
|
|
on covers that bracket the Document within the aggregate, or the
|
|
electronic equivalent of covers if the Document is in electronic
|
|
form. Otherwise they must appear on printed covers that bracket
|
|
the whole aggregate.
|
|
|
|
8. TRANSLATION
|
|
|
|
Translation is considered a kind of modification, so you may
|
|
distribute translations of the Document under the terms of section
|
|
4. Replacing Invariant Sections with translations requires special
|
|
permission from their copyright holders, but you may include
|
|
translations of some or all Invariant Sections in addition to the
|
|
original versions of these Invariant Sections. You may include a
|
|
translation of this License, and all the license notices in the
|
|
Document, and any Warranty Disclaimers, provided that you also
|
|
include the original English version of this License and the
|
|
original versions of those notices and disclaimers. In case of a
|
|
disagreement between the translation and the original version of
|
|
this License or a notice or disclaimer, the original version will
|
|
prevail.
|
|
|
|
If a section in the Document is Entitled "Acknowledgements",
|
|
"Dedications", or "History", the requirement (section 4) to
|
|
Preserve its Title (section 1) will typically require changing the
|
|
actual title.
|
|
|
|
9. TERMINATION
|
|
|
|
You may not copy, modify, sublicense, or distribute the Document
|
|
except as expressly provided under this License. Any attempt
|
|
otherwise to copy, modify, sublicense, or distribute it is void,
|
|
and will automatically terminate your rights under this License.
|
|
|
|
However, if you cease all violation of this License, then your
|
|
license from a particular copyright holder is reinstated (a)
|
|
provisionally, unless and until the copyright holder explicitly
|
|
and finally terminates your license, and (b) permanently, if the
|
|
copyright holder fails to notify you of the violation by some
|
|
reasonable means prior to 60 days after the cessation.
|
|
|
|
Moreover, your license from a particular copyright holder is
|
|
reinstated permanently if the copyright holder notifies you of the
|
|
violation by some reasonable means, this is the first time you have
|
|
received notice of violation of this License (for any work) from
|
|
that copyright holder, and you cure the violation prior to 30 days
|
|
after your receipt of the notice.
|
|
|
|
Termination of your rights under this section does not terminate
|
|
the licenses of parties who have received copies or rights from
|
|
you under this License. If your rights have been terminated and
|
|
not permanently reinstated, receipt of a copy of some or all of
|
|
the same material does not give you any rights to use it.
|
|
|
|
10. FUTURE REVISIONS OF THIS LICENSE
|
|
|
|
The Free Software Foundation may publish new, revised versions of
|
|
the GNU Free Documentation License from time to time. Such new
|
|
versions will be similar in spirit to the present version, but may
|
|
differ in detail to address new problems or concerns. See
|
|
`http://www.gnu.org/copyleft/'.
|
|
|
|
Each version of the License is given a distinguishing version
|
|
number. If the Document specifies that a particular numbered
|
|
version of this License "or any later version" applies to it, you
|
|
have the option of following the terms and conditions either of
|
|
that specified version or of any later version that has been
|
|
published (not as a draft) by the Free Software Foundation. If
|
|
the Document does not specify a version number of this License,
|
|
you may choose any version ever published (not as a draft) by the
|
|
Free Software Foundation. If the Document specifies that a proxy
|
|
can decide which future versions of this License can be used, that
|
|
proxy's public statement of acceptance of a version permanently
|
|
authorizes you to choose that version for the Document.
|
|
|
|
11. RELICENSING
|
|
|
|
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
|
|
World Wide Web server that publishes copyrightable works and also
|
|
provides prominent facilities for anybody to edit those works. A
|
|
public wiki that anybody can edit is an example of such a server.
|
|
A "Massive Multiauthor Collaboration" (or "MMC") contained in the
|
|
site means any set of copyrightable works thus published on the MMC
|
|
site.
|
|
|
|
"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
|
|
license published by Creative Commons Corporation, a not-for-profit
|
|
corporation with a principal place of business in San Francisco,
|
|
California, as well as future copyleft versions of that license
|
|
published by that same organization.
|
|
|
|
"Incorporate" means to publish or republish a Document, in whole or
|
|
in part, as part of another Document.
|
|
|
|
An MMC is "eligible for relicensing" if it is licensed under this
|
|
License, and if all works that were first published under this
|
|
License somewhere other than this MMC, and subsequently
|
|
incorporated in whole or in part into the MMC, (1) had no cover
|
|
texts or invariant sections, and (2) were thus incorporated prior
|
|
to November 1, 2008.
|
|
|
|
The operator of an MMC Site may republish an MMC contained in the
|
|
site under CC-BY-SA on the same site at any time before August 1,
|
|
2009, provided the MMC is eligible for relicensing.
|
|
|
|
|
|
ADDENDUM: How to use this License for your documents
|
|
====================================================
|
|
|
|
To use this License in a document you have written, include a copy of
|
|
the License in the document and put the following copyright and license
|
|
notices just after the title page:
|
|
|
|
Copyright (C) YEAR YOUR NAME.
|
|
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, no Front-Cover Texts, and no Back-Cover
|
|
Texts. A copy of the license is included in the section entitled ``GNU
|
|
Free Documentation License''.
|
|
|
|
If you have Invariant Sections, Front-Cover Texts and Back-Cover
|
|
Texts, replace the "with...Texts." line with this:
|
|
|
|
with the Invariant Sections being LIST THEIR TITLES, with
|
|
the Front-Cover Texts being LIST, and with the Back-Cover Texts
|
|
being LIST.
|
|
|
|
If you have Invariant Sections without Cover Texts, or some other
|
|
combination of the three, merge those two alternatives to suit the
|
|
situation.
|
|
|
|
If your document contains nontrivial examples of program code, we
|
|
recommend releasing these examples in parallel under your choice of
|
|
free software license, such as the GNU General Public License, to
|
|
permit their use in free software.
|
|
|
|
|
|
File: bashref.info, Node: Indexes, Prev: GNU Free Documentation License, Up: Top
|
|
|
|
Appendix D Indexes
|
|
******************
|
|
|
|
* Menu:
|
|
|
|
* Builtin Index:: Index of Bash builtin commands.
|
|
* Reserved Word Index:: Index of Bash reserved words.
|
|
* Variable Index:: Quick reference helps you find the
|
|
variable you want.
|
|
* Function Index:: Index of bindable Readline functions.
|
|
* Concept Index:: General index for concepts described in
|
|
this manual.
|
|
|
|
|
|
File: bashref.info, Node: Builtin Index, Next: Reserved Word Index, Up: Indexes
|
|
|
|
D.1 Index of Shell Builtin Commands
|
|
===================================
|
|
|
|
|