mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-21 21:07:57 +02:00
10221 lines
557 KiB
HTML
10221 lines
557 KiB
HTML
<html lang="en">
|
|
<head>
|
|
<title>Bash Reference Manual</title>
|
|
<meta http-equiv="Content-Type" content="text/html">
|
|
<meta name="description" content="Bash Reference Manual">
|
|
<meta name="generator" content="makeinfo 4.8">
|
|
<link title="Top" rel="top" href="#Top">
|
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
|
<!--
|
|
This text is a brief description of the features that are present in
|
|
the Bash shell (version 3.2, 30 December 2006).
|
|
|
|
This is Edition 3.2, last updated 30 December 2006,
|
|
of `The GNU Bash Reference Manual',
|
|
for `Bash', Version 3.2.
|
|
|
|
Copyright (C) 1988-2005 Free Software Foundation, Inc.
|
|
|
|
Permission is granted to make and distribute verbatim copies of
|
|
this manual provided the copyright notice and this permission notice
|
|
are preserved on all copies.
|
|
|
|
Permission is granted to copy, distribute and/or modify this
|
|
document under the terms of the GNU Free Documentation License,
|
|
Version 1.2 or any later version published by the Free Software
|
|
Foundation; with no Invariant Sections, with the Front-Cover texts
|
|
being "A GNU Manual," and with the Back-Cover Texts as in (a)
|
|
below. A copy of the license is included in the section entitled
|
|
"GNU Free Documentation License."
|
|
|
|
(a) The FSF's Back-Cover Text is: "You have freedom to copy and
|
|
modify this GNU Manual, like GNU software. Copies published by
|
|
the Free Software Foundation raise funds for GNU development."
|
|
-->
|
|
<meta http-equiv="Content-Style-Type" content="text/css">
|
|
<style type="text/css"><!--
|
|
pre.display { font-family:inherit }
|
|
pre.format { font-family:inherit }
|
|
pre.smalldisplay { font-family:inherit; font-size:smaller }
|
|
pre.smallformat { font-family:inherit; font-size:smaller }
|
|
pre.smallexample { font-size:smaller }
|
|
pre.smalllisp { font-size:smaller }
|
|
span.sc { font-variant:small-caps }
|
|
span.roman { font-family:serif; font-weight:normal; }
|
|
span.sansserif { font-family:sans-serif; font-weight:normal; }
|
|
--></style>
|
|
</head>
|
|
<body>
|
|
<h1 class="settitle">Bash Reference Manual</h1>
|
|
<div class="contents">
|
|
<h2>Table of Contents</h2>
|
|
<ul>
|
|
<li><a name="toc_Top" href="#Top">Bash Features</a>
|
|
<li><a name="toc_Introduction" href="#Introduction">1 Introduction</a>
|
|
<ul>
|
|
<li><a href="#What-is-Bash_003f">1.1 What is Bash?</a>
|
|
<li><a href="#What-is-a-shell_003f">1.2 What is a shell?</a>
|
|
</li></ul>
|
|
<li><a name="toc_Definitions" href="#Definitions">2 Definitions</a>
|
|
<li><a name="toc_Basic-Shell-Features" href="#Basic-Shell-Features">3 Basic Shell Features</a>
|
|
<ul>
|
|
<li><a href="#Shell-Syntax">3.1 Shell Syntax</a>
|
|
<ul>
|
|
<li><a href="#Shell-Operation">3.1.1 Shell Operation</a>
|
|
<li><a href="#Quoting">3.1.2 Quoting</a>
|
|
<ul>
|
|
<li><a href="#Escape-Character">3.1.2.1 Escape Character</a>
|
|
<li><a href="#Single-Quotes">3.1.2.2 Single Quotes</a>
|
|
<li><a href="#Double-Quotes">3.1.2.3 Double Quotes</a>
|
|
<li><a href="#ANSI_002dC-Quoting">3.1.2.4 ANSI-C Quoting</a>
|
|
<li><a href="#Locale-Translation">3.1.2.5 Locale-Specific Translation</a>
|
|
</li></ul>
|
|
<li><a href="#Comments">3.1.3 Comments</a>
|
|
</li></ul>
|
|
<li><a href="#Shell-Commands">3.2 Shell Commands</a>
|
|
<ul>
|
|
<li><a href="#Simple-Commands">3.2.1 Simple Commands</a>
|
|
<li><a href="#Pipelines">3.2.2 Pipelines</a>
|
|
<li><a href="#Lists">3.2.3 Lists of Commands</a>
|
|
<li><a href="#Compound-Commands">3.2.4 Compound Commands</a>
|
|
<ul>
|
|
<li><a href="#Looping-Constructs">3.2.4.1 Looping Constructs</a>
|
|
<li><a href="#Conditional-Constructs">3.2.4.2 Conditional Constructs</a>
|
|
<li><a href="#Command-Grouping">3.2.4.3 Grouping Commands</a>
|
|
</li></ul>
|
|
</li></ul>
|
|
<li><a href="#Shell-Functions">3.3 Shell Functions</a>
|
|
<li><a href="#Shell-Parameters">3.4 Shell Parameters</a>
|
|
<ul>
|
|
<li><a href="#Positional-Parameters">3.4.1 Positional Parameters</a>
|
|
<li><a href="#Special-Parameters">3.4.2 Special Parameters</a>
|
|
</li></ul>
|
|
<li><a href="#Shell-Expansions">3.5 Shell Expansions</a>
|
|
<ul>
|
|
<li><a href="#Brace-Expansion">3.5.1 Brace Expansion</a>
|
|
<li><a href="#Tilde-Expansion">3.5.2 Tilde Expansion</a>
|
|
<li><a href="#Shell-Parameter-Expansion">3.5.3 Shell Parameter Expansion</a>
|
|
<li><a href="#Command-Substitution">3.5.4 Command Substitution</a>
|
|
<li><a href="#Arithmetic-Expansion">3.5.5 Arithmetic Expansion</a>
|
|
<li><a href="#Process-Substitution">3.5.6 Process Substitution</a>
|
|
<li><a href="#Word-Splitting">3.5.7 Word Splitting</a>
|
|
<li><a href="#Filename-Expansion">3.5.8 Filename Expansion</a>
|
|
<ul>
|
|
<li><a href="#Pattern-Matching">3.5.8.1 Pattern Matching</a>
|
|
</li></ul>
|
|
<li><a href="#Quote-Removal">3.5.9 Quote Removal</a>
|
|
</li></ul>
|
|
<li><a href="#Redirections">3.6 Redirections</a>
|
|
<ul>
|
|
<li><a href="#Redirections">3.6.1 Redirecting Input</a>
|
|
<li><a href="#Redirections">3.6.2 Redirecting Output</a>
|
|
<li><a href="#Redirections">3.6.3 Appending Redirected Output</a>
|
|
<li><a href="#Redirections">3.6.4 Redirecting Standard Output and Standard Error</a>
|
|
<li><a href="#Redirections">3.6.5 Here Documents</a>
|
|
<li><a href="#Redirections">3.6.6 Here Strings</a>
|
|
<li><a href="#Redirections">3.6.7 Duplicating File Descriptors</a>
|
|
<li><a href="#Redirections">3.6.8 Moving File Descriptors</a>
|
|
<li><a href="#Redirections">3.6.9 Opening File Descriptors for Reading and Writing</a>
|
|
</li></ul>
|
|
<li><a href="#Executing-Commands">3.7 Executing Commands</a>
|
|
<ul>
|
|
<li><a href="#Simple-Command-Expansion">3.7.1 Simple Command Expansion</a>
|
|
<li><a href="#Command-Search-and-Execution">3.7.2 Command Search and Execution</a>
|
|
<li><a href="#Command-Execution-Environment">3.7.3 Command Execution Environment</a>
|
|
<li><a href="#Environment">3.7.4 Environment</a>
|
|
<li><a href="#Exit-Status">3.7.5 Exit Status</a>
|
|
<li><a href="#Signals">3.7.6 Signals</a>
|
|
</li></ul>
|
|
<li><a href="#Shell-Scripts">3.8 Shell Scripts</a>
|
|
</li></ul>
|
|
<li><a name="toc_Shell-Builtin-Commands" href="#Shell-Builtin-Commands">4 Shell Builtin Commands</a>
|
|
<ul>
|
|
<li><a href="#Bourne-Shell-Builtins">4.1 Bourne Shell Builtins</a>
|
|
<li><a href="#Bash-Builtins">4.2 Bash Builtin Commands</a>
|
|
<li><a href="#Modifying-Shell-Behavior">4.3 Modifying Shell Behavior</a>
|
|
<ul>
|
|
<li><a href="#The-Set-Builtin">4.3.1 The Set Builtin</a>
|
|
<li><a href="#The-Shopt-Builtin">4.3.2 The Shopt Builtin</a>
|
|
</li></ul>
|
|
<li><a href="#Special-Builtins">4.4 Special Builtins</a>
|
|
</li></ul>
|
|
<li><a name="toc_Shell-Variables" href="#Shell-Variables">5 Shell Variables</a>
|
|
<ul>
|
|
<li><a href="#Bourne-Shell-Variables">5.1 Bourne Shell Variables</a>
|
|
<li><a href="#Bash-Variables">5.2 Bash Variables</a>
|
|
</li></ul>
|
|
<li><a name="toc_Bash-Features" href="#Bash-Features">6 Bash Features</a>
|
|
<ul>
|
|
<li><a href="#Invoking-Bash">6.1 Invoking Bash</a>
|
|
<li><a href="#Bash-Startup-Files">6.2 Bash Startup Files</a>
|
|
<li><a href="#Interactive-Shells">6.3 Interactive Shells</a>
|
|
<ul>
|
|
<li><a href="#What-is-an-Interactive-Shell_003f">6.3.1 What is an Interactive Shell?</a>
|
|
<li><a href="#Is-this-Shell-Interactive_003f">6.3.2 Is this Shell Interactive?</a>
|
|
<li><a href="#Interactive-Shell-Behavior">6.3.3 Interactive Shell Behavior</a>
|
|
</li></ul>
|
|
<li><a href="#Bash-Conditional-Expressions">6.4 Bash Conditional Expressions</a>
|
|
<li><a href="#Shell-Arithmetic">6.5 Shell Arithmetic</a>
|
|
<li><a href="#Aliases">6.6 Aliases</a>
|
|
<li><a href="#Arrays">6.7 Arrays</a>
|
|
<li><a href="#The-Directory-Stack">6.8 The Directory Stack</a>
|
|
<ul>
|
|
<li><a href="#Directory-Stack-Builtins">6.8.1 Directory Stack Builtins</a>
|
|
</li></ul>
|
|
<li><a href="#Printing-a-Prompt">6.9 Controlling the Prompt</a>
|
|
<li><a href="#The-Restricted-Shell">6.10 The Restricted Shell</a>
|
|
<li><a href="#Bash-POSIX-Mode">6.11 Bash POSIX Mode</a>
|
|
</li></ul>
|
|
<li><a name="toc_Job-Control" href="#Job-Control">7 Job Control</a>
|
|
<ul>
|
|
<li><a href="#Job-Control-Basics">7.1 Job Control Basics</a>
|
|
<li><a href="#Job-Control-Builtins">7.2 Job Control Builtins</a>
|
|
<li><a href="#Job-Control-Variables">7.3 Job Control Variables</a>
|
|
</li></ul>
|
|
<li><a name="toc_Command-Line-Editing" href="#Command-Line-Editing">8 Command Line Editing</a>
|
|
<ul>
|
|
<li><a href="#Introduction-and-Notation">8.1 Introduction to Line Editing</a>
|
|
<li><a href="#Readline-Interaction">8.2 Readline Interaction</a>
|
|
<ul>
|
|
<li><a href="#Readline-Bare-Essentials">8.2.1 Readline Bare Essentials</a>
|
|
<li><a href="#Readline-Movement-Commands">8.2.2 Readline Movement Commands</a>
|
|
<li><a href="#Readline-Killing-Commands">8.2.3 Readline Killing Commands</a>
|
|
<li><a href="#Readline-Arguments">8.2.4 Readline Arguments</a>
|
|
<li><a href="#Searching">8.2.5 Searching for Commands in the History</a>
|
|
</li></ul>
|
|
<li><a href="#Readline-Init-File">8.3 Readline Init File</a>
|
|
<ul>
|
|
<li><a href="#Readline-Init-File-Syntax">8.3.1 Readline Init File Syntax</a>
|
|
<li><a href="#Conditional-Init-Constructs">8.3.2 Conditional Init Constructs</a>
|
|
<li><a href="#Sample-Init-File">8.3.3 Sample Init File</a>
|
|
</li></ul>
|
|
<li><a href="#Bindable-Readline-Commands">8.4 Bindable Readline Commands</a>
|
|
<ul>
|
|
<li><a href="#Commands-For-Moving">8.4.1 Commands For Moving</a>
|
|
<li><a href="#Commands-For-History">8.4.2 Commands For Manipulating The History</a>
|
|
<li><a href="#Commands-For-Text">8.4.3 Commands For Changing Text</a>
|
|
<li><a href="#Commands-For-Killing">8.4.4 Killing And Yanking</a>
|
|
<li><a href="#Numeric-Arguments">8.4.5 Specifying Numeric Arguments</a>
|
|
<li><a href="#Commands-For-Completion">8.4.6 Letting Readline Type For You</a>
|
|
<li><a href="#Keyboard-Macros">8.4.7 Keyboard Macros</a>
|
|
<li><a href="#Miscellaneous-Commands">8.4.8 Some Miscellaneous Commands</a>
|
|
</li></ul>
|
|
<li><a href="#Readline-vi-Mode">8.5 Readline vi Mode</a>
|
|
<li><a href="#Programmable-Completion">8.6 Programmable Completion</a>
|
|
<li><a href="#Programmable-Completion-Builtins">8.7 Programmable Completion Builtins</a>
|
|
</li></ul>
|
|
<li><a name="toc_Using-History-Interactively" href="#Using-History-Interactively">9 Using History Interactively</a>
|
|
<ul>
|
|
<li><a href="#Bash-History-Facilities">9.1 Bash History Facilities</a>
|
|
<li><a href="#Bash-History-Builtins">9.2 Bash History Builtins</a>
|
|
<li><a href="#History-Interaction">9.3 History Expansion</a>
|
|
<ul>
|
|
<li><a href="#Event-Designators">9.3.1 Event Designators</a>
|
|
<li><a href="#Word-Designators">9.3.2 Word Designators</a>
|
|
<li><a href="#Modifiers">9.3.3 Modifiers</a>
|
|
</li></ul>
|
|
</li></ul>
|
|
<li><a name="toc_Installing-Bash" href="#Installing-Bash">10 Installing Bash</a>
|
|
<ul>
|
|
<li><a href="#Basic-Installation">10.1 Basic Installation</a>
|
|
<li><a href="#Compilers-and-Options">10.2 Compilers and Options</a>
|
|
<li><a href="#Compiling-For-Multiple-Architectures">10.3 Compiling For Multiple Architectures</a>
|
|
<li><a href="#Installation-Names">10.4 Installation Names</a>
|
|
<li><a href="#Specifying-the-System-Type">10.5 Specifying the System Type</a>
|
|
<li><a href="#Sharing-Defaults">10.6 Sharing Defaults</a>
|
|
<li><a href="#Operation-Controls">10.7 Operation Controls</a>
|
|
<li><a href="#Optional-Features">10.8 Optional Features</a>
|
|
</li></ul>
|
|
<li><a name="toc_Reporting-Bugs" href="#Reporting-Bugs">Appendix A Reporting Bugs</a>
|
|
<li><a name="toc_Major-Differences-From-The-Bourne-Shell" href="#Major-Differences-From-The-Bourne-Shell">Appendix B Major Differences From The Bourne Shell</a>
|
|
<ul>
|
|
<li><a href="#Major-Differences-From-The-Bourne-Shell">B.1 Implementation Differences From The SVR4.2 Shell</a>
|
|
</li></ul>
|
|
<li><a name="toc_Copying-This-Manual" href="#Copying-This-Manual">Appendix C Copying This Manual</a>
|
|
<ul>
|
|
<li><a href="#GNU-Free-Documentation-License">C.1 GNU Free Documentation License</a>
|
|
<ul>
|
|
<li><a href="#GNU-Free-Documentation-License">C.1.1 ADDENDUM: How to use this License for your documents</a>
|
|
</li></ul>
|
|
</li></ul>
|
|
<li><a name="toc_Builtin-Index" href="#Builtin-Index">Index of Shell Builtin Commands</a>
|
|
<li><a name="toc_Reserved-Word-Index" href="#Reserved-Word-Index">Index of Shell Reserved Words</a>
|
|
<li><a name="toc_Variable-Index" href="#Variable-Index">Parameter and Variable Index</a>
|
|
<li><a name="toc_Function-Index" href="#Function-Index">Function Index</a>
|
|
<li><a name="toc_Concept-Index" href="#Concept-Index">Concept Index</a>
|
|
</li></ul>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Top"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Introduction">Introduction</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#dir">(dir)</a>,
|
|
Up: <a rel="up" accesskey="u" href="#dir">(dir)</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="unnumbered">Bash Features</h2>
|
|
|
|
<p>This text is a brief description of the features that are present in
|
|
the Bash shell (version 3.2, 30 December 2006).
|
|
|
|
<p>This is Edition 3.2, last updated 30 December 2006,
|
|
of <cite>The GNU Bash Reference Manual</cite>,
|
|
for <code>Bash</code>, Version 3.2.
|
|
|
|
<p>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 (<samp><span class="file">sh</span></samp>), the Korn Shell
|
|
(<samp><span class="file">ksh</span></samp>), and the C-shell (<samp><span class="file">csh</span></samp> and its successor,
|
|
<samp><span class="file">tcsh</span></samp>). The following menu breaks the features up into
|
|
categories based upon which one of these other shells inspired the
|
|
feature.
|
|
|
|
<p>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.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Introduction">Introduction</a>: An introduction to the shell.
|
|
<li><a accesskey="2" href="#Definitions">Definitions</a>: Some definitions used in the rest of this
|
|
manual.
|
|
<li><a accesskey="3" href="#Basic-Shell-Features">Basic Shell Features</a>: The shell "building blocks".
|
|
<li><a accesskey="4" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>: Commands that are a part of the shell.
|
|
<li><a accesskey="5" href="#Shell-Variables">Shell Variables</a>: Variables used or set by Bash.
|
|
<li><a accesskey="6" href="#Bash-Features">Bash Features</a>: Features found only in Bash.
|
|
<li><a accesskey="7" href="#Job-Control">Job Control</a>: What job control is and how Bash allows you
|
|
to use it.
|
|
<li><a accesskey="8" href="#Using-History-Interactively">Using History Interactively</a>: Command History Expansion
|
|
<li><a accesskey="9" href="#Command-Line-Editing">Command Line Editing</a>: Chapter describing the command line
|
|
editing features.
|
|
<li><a href="#Installing-Bash">Installing Bash</a>: How to build and install Bash on your system.
|
|
<li><a href="#Reporting-Bugs">Reporting Bugs</a>: How to report bugs in Bash.
|
|
<li><a href="#Major-Differences-From-The-Bourne-Shell">Major Differences From The Bourne Shell</a>: A terse list of the differences
|
|
between Bash and historical
|
|
versions of /bin/sh.
|
|
<li><a href="#Copying-This-Manual">Copying This Manual</a>: Copying this manual.
|
|
<li><a href="#Builtin-Index">Builtin Index</a>: Index of Bash builtin commands.
|
|
<li><a href="#Reserved-Word-Index">Reserved Word Index</a>: Index of Bash reserved words.
|
|
<li><a href="#Variable-Index">Variable Index</a>: Quick reference helps you find the
|
|
variable you want.
|
|
<li><a href="#Function-Index">Function Index</a>: Index of bindable Readline functions.
|
|
<li><a href="#Concept-Index">Concept Index</a>: General index for concepts described in
|
|
this manual.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Introduction"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Definitions">Definitions</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Top">Top</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">1 Introduction</h2>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#What-is-Bash_003f">What is Bash?</a>: A short description of Bash.
|
|
<li><a accesskey="2" href="#What-is-a-shell_003f">What is a shell?</a>: A brief introduction to shells.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="What-is-Bash%3f"></a>
|
|
<a name="What-is-Bash_003f"></a>
|
|
Next: <a rel="next" accesskey="n" href="#What-is-a-shell_003f">What is a shell?</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Introduction">Introduction</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">1.1 What is Bash?</h3>
|
|
|
|
<p>Bash is the shell, or command language interpreter,
|
|
for the <span class="sc">gnu</span> operating system.
|
|
The name is an acronym for the `<samp><span class="samp">Bourne-Again SHell</span></samp>',
|
|
a pun on Stephen Bourne, the author of the direct ancestor of
|
|
the current Unix shell <code>sh</code>,
|
|
which appeared in the Seventh Edition Bell Labs Research version
|
|
of Unix.
|
|
|
|
<p>Bash is largely compatible with <code>sh</code> and incorporates useful
|
|
features from the Korn shell <code>ksh</code> and the C shell <code>csh</code>.
|
|
It is intended to be a conformant implementation of the <span class="sc">ieee</span>
|
|
<span class="sc">posix</span> Shell and Tools portion of the <span class="sc">ieee</span> <span class="sc">posix</span>
|
|
specification (<span class="sc">ieee</span> Standard 1003.1).
|
|
It offers functional improvements over <code>sh</code> for both interactive and
|
|
programming use.
|
|
|
|
<p>While the <span class="sc">gnu</span> operating system provides other shells, including
|
|
a version of <code>csh</code>, Bash is the default shell.
|
|
Like other <span class="sc">gnu</span> 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 <span class="sc">ms-dos</span>, <span class="sc">os/2</span>,
|
|
and Windows platforms.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="What-is-a-shell%3f"></a>
|
|
<a name="What-is-a-shell_003f"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#What-is-Bash_003f">What is Bash?</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Introduction">Introduction</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">1.2 What is a shell?</h3>
|
|
|
|
<p>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.
|
|
|
|
<p>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 <span class="sc">gnu</span> 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 <samp><span class="file">/bin</span></samp>, allowing users
|
|
or groups to establish custom environments to automate their common
|
|
tasks.
|
|
|
|
<p>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.
|
|
|
|
<p>A shell allows execution of <span class="sc">gnu</span> 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 <dfn>redirection</dfn> constructs permit
|
|
fine-grained control of the input and output of those commands.
|
|
Moreover, the shell allows control over the contents of commands'
|
|
environments.
|
|
|
|
<p>Shells also provide a small set of built-in
|
|
commands (<dfn>builtins</dfn>) implementing functionality impossible
|
|
or inconvenient to obtain via separate utilities.
|
|
For example, <code>cd</code>, <code>break</code>, <code>continue</code>, and
|
|
<code>exec</code>) cannot be implemented outside of the shell because
|
|
they directly manipulate the shell itself.
|
|
The <code>history</code>, <code>getopts</code>, <code>kill</code>, or <code>pwd</code>
|
|
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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Definitions"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Basic-Shell-Features">Basic Shell Features</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Introduction">Introduction</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">2 Definitions</h2>
|
|
|
|
<p>These definitions are used throughout the remainder of this manual.
|
|
|
|
<dl>
|
|
<dt><code>POSIX</code><dd><a name="index-POSIX-1"></a>A family of open system standards based on Unix. Bash
|
|
is primarily concerned with the Shell and Utilities portion of the
|
|
<span class="sc">posix</span> 1003.1 standard.
|
|
|
|
<br><dt><code>blank</code><dd>A space or tab character.
|
|
|
|
<br><dt><code>builtin</code><dd><a name="index-builtin-2"></a>A command that is implemented internally by the shell itself, rather
|
|
than by an executable program somewhere in the file system.
|
|
|
|
<br><dt><code>control operator</code><dd><a name="index-control-operator-3"></a>A <code>word</code> that performs a control function. It is a <code>newline</code>
|
|
or one of the following:
|
|
`<samp><span class="samp">||</span></samp>', `<samp><span class="samp">&&</span></samp>', `<samp><span class="samp">&</span></samp>', `<samp><span class="samp">;</span></samp>', `<samp><span class="samp">;;</span></samp>',
|
|
`<samp><span class="samp">|</span></samp>', `<samp><span class="samp">(</span></samp>', or `<samp><span class="samp">)</span></samp>'.
|
|
|
|
<br><dt><code>exit status</code><dd><a name="index-exit-status-4"></a>The value returned by a command to its caller. The value is restricted
|
|
to eight bits, so the maximum value is 255.
|
|
|
|
<br><dt><code>field</code><dd><a name="index-field-5"></a>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.
|
|
|
|
<br><dt><code>filename</code><dd><a name="index-filename-6"></a>A string of characters used to identify a file.
|
|
|
|
<br><dt><code>job</code><dd><a name="index-job-7"></a>A set of processes comprising a pipeline, and any processes descended
|
|
from it, that are all in the same process group.
|
|
|
|
<br><dt><code>job control</code><dd><a name="index-job-control-8"></a>A mechanism by which users can selectively stop (suspend) and restart
|
|
(resume) execution of processes.
|
|
|
|
<br><dt><code>metacharacter</code><dd><a name="index-metacharacter-9"></a>A character that, when unquoted, separates words. A metacharacter is
|
|
a <code>blank</code> or one of the following characters:
|
|
`<samp><span class="samp">|</span></samp>', `<samp><span class="samp">&</span></samp>', `<samp><span class="samp">;</span></samp>', `<samp><span class="samp">(</span></samp>', `<samp><span class="samp">)</span></samp>', `<samp><span class="samp"><</span></samp>', or
|
|
`<samp><span class="samp">></span></samp>'.
|
|
|
|
<br><dt><code>name</code><dd><a name="index-name-10"></a><a name="index-identifier-11"></a>A <code>word</code> consisting solely of letters, numbers, and underscores,
|
|
and beginning with a letter or underscore. <code>Name</code>s are used as
|
|
shell variable and function names.
|
|
Also referred to as an <code>identifier</code>.
|
|
|
|
<br><dt><code>operator</code><dd><a name="index-operator_002c-shell-12"></a>A <code>control operator</code> or a <code>redirection operator</code>.
|
|
See <a href="#Redirections">Redirections</a>, for a list of redirection operators.
|
|
|
|
<br><dt><code>process group</code><dd><a name="index-process-group-13"></a>A collection of related processes each having the same process
|
|
group <span class="sc">id</span>.
|
|
|
|
<br><dt><code>process group ID</code><dd><a name="index-process-group-ID-14"></a>A unique identifier that represents a <code>process group</code>
|
|
during its lifetime.
|
|
|
|
<br><dt><code>reserved word</code><dd><a name="index-reserved-word-15"></a>A <code>word</code> that has a special meaning to the shell. Most reserved
|
|
words introduce shell flow control constructs, such as <code>for</code> and
|
|
<code>while</code>.
|
|
|
|
<br><dt><code>return status</code><dd><a name="index-return-status-16"></a>A synonym for <code>exit status</code>.
|
|
|
|
<br><dt><code>signal</code><dd><a name="index-signal-17"></a>A mechanism by which a process may be notified by the kernel
|
|
of an event occurring in the system.
|
|
|
|
<br><dt><code>special builtin</code><dd><a name="index-special-builtin-18"></a>A shell builtin command that has been classified as special by the
|
|
<span class="sc">posix</span> standard.
|
|
|
|
<br><dt><code>token</code><dd><a name="index-token-19"></a>A sequence of characters considered a single unit by the shell. It is
|
|
either a <code>word</code> or an <code>operator</code>.
|
|
|
|
<br><dt><code>word</code><dd><a name="index-word-20"></a>A <code>token</code> that is not an <code>operator</code>.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Basic-Shell-Features"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Definitions">Definitions</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">3 Basic Shell Features</h2>
|
|
|
|
<p><a name="index-Bourne-shell-21"></a>
|
|
Bash is an acronym for `<samp><span class="samp">Bourne-Again SHell</span></samp>'.
|
|
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 <span class="sc">posix</span>
|
|
specification for the `standard' Unix shell.
|
|
|
|
<p>This chapter briefly summarizes the shell's `building blocks':
|
|
commands, control structures, shell functions, shell <i>parameters</i>,
|
|
shell expansions,
|
|
<i>redirections</i>, which are a way to direct input and output from
|
|
and to named files, and how the shell executes commands.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Shell-Syntax">Shell Syntax</a>: What your input means to the shell.
|
|
<li><a accesskey="2" href="#Shell-Commands">Shell Commands</a>: The types of commands you can use.
|
|
<li><a accesskey="3" href="#Shell-Functions">Shell Functions</a>: Grouping commands by name.
|
|
<li><a accesskey="4" href="#Shell-Parameters">Shell Parameters</a>: How the shell stores values.
|
|
<li><a accesskey="5" href="#Shell-Expansions">Shell Expansions</a>: How Bash expands parameters and the various
|
|
expansions available.
|
|
<li><a accesskey="6" href="#Redirections">Redirections</a>: A way to control where input and output go.
|
|
<li><a accesskey="7" href="#Executing-Commands">Executing Commands</a>: What happens when you run a command.
|
|
<li><a accesskey="8" href="#Shell-Scripts">Shell Scripts</a>: Executing files of shell commands.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Syntax"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Commands">Shell Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.1 Shell Syntax</h3>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Shell-Operation">Shell Operation</a>: The basic operation of the shell.
|
|
<li><a accesskey="2" href="#Quoting">Quoting</a>: How to remove the special meaning from characters.
|
|
<li><a accesskey="3" href="#Comments">Comments</a>: How to specify comments.
|
|
</ul>
|
|
|
|
<p>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 (`<samp><span class="samp">#</span></samp>'), and the rest
|
|
of that line.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Operation"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Quoting">Quoting</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Syntax">Shell Syntax</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.1.1 Shell Operation</h4>
|
|
|
|
<p>The following is a brief description of the shell's operation when it
|
|
reads and executes a command. Basically, the shell does the
|
|
following:
|
|
|
|
<ol type=1 start=1>
|
|
<li>Reads its input from a file (see <a href="#Shell-Scripts">Shell Scripts</a>), from a string
|
|
supplied as an argument to the <samp><span class="option">-c</span></samp> invocation option
|
|
(see <a href="#Invoking-Bash">Invoking Bash</a>), or from the user's terminal.
|
|
|
|
<li>Breaks the input into words and operators, obeying the quoting rules
|
|
described in <a href="#Quoting">Quoting</a>. These tokens are separated by
|
|
<code>metacharacters</code>. Alias expansion is performed by this step
|
|
(see <a href="#Aliases">Aliases</a>).
|
|
|
|
<li>Parses the tokens into simple and compound commands
|
|
(see <a href="#Shell-Commands">Shell Commands</a>).
|
|
|
|
<li>Performs the various shell expansions (see <a href="#Shell-Expansions">Shell Expansions</a>), breaking
|
|
the expanded tokens into lists of filenames (see <a href="#Filename-Expansion">Filename Expansion</a>)
|
|
and commands and arguments.
|
|
|
|
<li>Performs any necessary redirections (see <a href="#Redirections">Redirections</a>) and removes
|
|
the redirection operators and their operands from the argument list.
|
|
|
|
<li>Executes the command (see <a href="#Executing-Commands">Executing Commands</a>).
|
|
|
|
<li>Optionally waits for the command to complete and collects its exit
|
|
status (see <a href="#Exit-Status">Exit Status</a>).
|
|
|
|
</ol>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Quoting"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Comments">Comments</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Operation">Shell Operation</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Syntax">Shell Syntax</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.1.2 Quoting</h4>
|
|
|
|
<p><a name="index-quoting-22"></a>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Escape-Character">Escape Character</a>: How to remove the special meaning from a single
|
|
character.
|
|
<li><a accesskey="2" href="#Single-Quotes">Single Quotes</a>: How to inhibit all interpretation of a sequence
|
|
of characters.
|
|
<li><a accesskey="3" href="#Double-Quotes">Double Quotes</a>: How to suppress most of the interpretation of a
|
|
sequence of characters.
|
|
<li><a accesskey="4" href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>: How to expand ANSI-C sequences in quoted strings.
|
|
<li><a accesskey="5" href="#Locale-Translation">Locale Translation</a>: How to translate strings into different languages.
|
|
</ul>
|
|
|
|
<p>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.
|
|
|
|
<p>Each of the shell metacharacters (see <a href="#Definitions">Definitions</a>)
|
|
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
|
|
(see <a href="#History-Interaction">History Interaction</a>), the
|
|
<var>history expansion</var> character, usually `<samp><span class="samp">!</span></samp>', must be quoted
|
|
to prevent history expansion. See <a href="#Bash-History-Facilities">Bash History Facilities</a>, for
|
|
more details concerning history expansion.
|
|
|
|
<p>There are three quoting mechanisms: the
|
|
<var>escape character</var>, single quotes, and double quotes.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Escape-Character"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Single-Quotes">Single Quotes</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Quoting">Quoting</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.1.2.1 Escape Character</h5>
|
|
|
|
<p>A non-quoted backslash `<samp><span class="samp">\</span></samp>' is the Bash escape character.
|
|
It preserves the literal value of the next character that follows,
|
|
with the exception of <code>newline</code>. If a <code>\newline</code> pair
|
|
appears, and the backslash itself is not quoted, the <code>\newline</code>
|
|
is treated as a line continuation (that is, it is removed from
|
|
the input stream and effectively ignored).
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Single-Quotes"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Double-Quotes">Double Quotes</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Escape-Character">Escape Character</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Quoting">Quoting</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.1.2.2 Single Quotes</h5>
|
|
|
|
<p>Enclosing characters in single quotes (`<samp><span class="samp">'</span></samp>') 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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Double-Quotes"></a>
|
|
Next: <a rel="next" accesskey="n" href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Single-Quotes">Single Quotes</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Quoting">Quoting</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.1.2.3 Double Quotes</h5>
|
|
|
|
<p>Enclosing characters in double quotes (`<samp><span class="samp">"</span></samp>') preserves the literal value
|
|
of all characters within the quotes, with the exception of
|
|
`<samp><span class="samp">$</span></samp>', `<samp><span class="samp">`</span></samp>', `<samp><span class="samp">\</span></samp>',
|
|
and, when history expansion is enabled, `<samp><span class="samp">!</span></samp>'.
|
|
The characters `<samp><span class="samp">$</span></samp>' and `<samp><span class="samp">`</span></samp>'
|
|
retain their special meaning within double quotes (see <a href="#Shell-Expansions">Shell Expansions</a>).
|
|
The backslash retains its special meaning only when followed by one of
|
|
the following characters:
|
|
`<samp><span class="samp">$</span></samp>', `<samp><span class="samp">`</span></samp>', `<samp><span class="samp">"</span></samp>', `<samp><span class="samp">\</span></samp>', or <code>newline</code>.
|
|
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 `<samp><span class="samp">!</span></samp>'
|
|
appearing in double quotes is escaped using a backslash.
|
|
The backslash preceding the `<samp><span class="samp">!</span></samp>' is not removed.
|
|
|
|
<p>The special parameters `<samp><span class="samp">*</span></samp>' and `<samp><span class="samp">@</span></samp>' have special meaning
|
|
when in double quotes (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="ANSI-C-Quoting"></a>
|
|
<a name="ANSI_002dC-Quoting"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Locale-Translation">Locale Translation</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Double-Quotes">Double Quotes</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Quoting">Quoting</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.1.2.4 ANSI-C Quoting</h5>
|
|
|
|
<p><a name="index-quoting_002c-ANSI-23"></a>
|
|
Words of the form <code>$'</code><var>string</var><code>'</code> are treated specially. The
|
|
word expands to <var>string</var>, with backslash-escaped characters replaced
|
|
as specified by the ANSI C standard. Backslash escape sequences, if
|
|
present, are decoded as follows:
|
|
|
|
<dl>
|
|
<dt><code>\a</code><dd>alert (bell)
|
|
<br><dt><code>\b</code><dd>backspace
|
|
<br><dt><code>\e</code><dd>an escape character (not ANSI C)
|
|
<br><dt><code>\f</code><dd>form feed
|
|
<br><dt><code>\n</code><dd>newline
|
|
<br><dt><code>\r</code><dd>carriage return
|
|
<br><dt><code>\t</code><dd>horizontal tab
|
|
<br><dt><code>\v</code><dd>vertical tab
|
|
<br><dt><code>\\</code><dd>backslash
|
|
<br><dt><code>\'</code><dd>single quote
|
|
<br><dt><code>\</code><var>nnn</var><dd>the eight-bit character whose value is the octal value <var>nnn</var>
|
|
(one to three digits)
|
|
<br><dt><code>\x</code><var>HH</var><dd>the eight-bit character whose value is the hexadecimal value <var>HH</var>
|
|
(one or two hex digits)
|
|
<br><dt><code>\c</code><var>x</var><dd>a control-<var>x</var> character
|
|
</dl>
|
|
|
|
<p class="noindent">The expanded result is single-quoted, as if the dollar sign had not
|
|
been present.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Locale-Translation"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Quoting">Quoting</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.1.2.5 Locale-Specific Translation</h5>
|
|
|
|
<p><a name="index-localization-24"></a><a name="index-internationalization-25"></a><a name="index-native-languages-26"></a><a name="index-translation_002c-native-languages-27"></a>
|
|
A double-quoted string preceded by a dollar sign (`<samp><span class="samp">$</span></samp>') will cause
|
|
the string to be translated according to the current locale.
|
|
If the current locale is <code>C</code> or <code>POSIX</code>, the dollar sign
|
|
is ignored.
|
|
If the string is translated and replaced, the replacement is
|
|
double-quoted.
|
|
|
|
<p><a name="index-LC_005fMESSAGES-28"></a><a name="index-TEXTDOMAIN-29"></a><a name="index-TEXTDOMAINDIR-30"></a>Some systems use the message catalog selected by the <samp><span class="env">LC_MESSAGES</span></samp>
|
|
shell variable. Others create the name of the message catalog from the
|
|
value of the <samp><span class="env">TEXTDOMAIN</span></samp> shell variable, possibly adding a
|
|
suffix of `<samp><span class="samp">.mo</span></samp>'. If you use the <samp><span class="env">TEXTDOMAIN</span></samp> variable, you
|
|
may need to set the <samp><span class="env">TEXTDOMAINDIR</span></samp> variable to the location of
|
|
the message catalog files. Still others use both variables in this
|
|
fashion:
|
|
<samp><span class="env">TEXTDOMAINDIR</span></samp>/<samp><span class="env">LC_MESSAGES</span></samp>/LC_MESSAGES/<samp><span class="env">TEXTDOMAIN</span></samp>.mo.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Comments"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Quoting">Quoting</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Syntax">Shell Syntax</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.1.3 Comments</h4>
|
|
|
|
<p><a name="index-comments_002c-shell-31"></a>
|
|
In a non-interactive shell, or an interactive shell in which the
|
|
<code>interactive_comments</code> option to the <code>shopt</code>
|
|
builtin is enabled (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>),
|
|
a word beginning with `<samp><span class="samp">#</span></samp>'
|
|
causes that word and all remaining characters on that line to
|
|
be ignored. An interactive shell without the <code>interactive_comments</code>
|
|
option enabled does not allow comments. The <code>interactive_comments</code>
|
|
option is on by default in interactive shells.
|
|
See <a href="#Interactive-Shells">Interactive Shells</a>, for a description of what makes
|
|
a shell interactive.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Commands"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Functions">Shell Functions</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Syntax">Shell Syntax</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.2 Shell Commands</h3>
|
|
|
|
<p><a name="index-commands_002c-shell-32"></a>
|
|
A simple shell command such as <code>echo a b c</code> consists of the command
|
|
itself followed by arguments, separated by spaces.
|
|
|
|
<p>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.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Simple-Commands">Simple Commands</a>: The most common type of command.
|
|
<li><a accesskey="2" href="#Pipelines">Pipelines</a>: Connecting the input and output of several
|
|
commands.
|
|
<li><a accesskey="3" href="#Lists">Lists</a>: How to execute commands sequentially.
|
|
<li><a accesskey="4" href="#Compound-Commands">Compound Commands</a>: Shell commands for control flow.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Simple-Commands"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Pipelines">Pipelines</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Commands">Shell Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.2.1 Simple Commands</h4>
|
|
|
|
<p><a name="index-commands_002c-simple-33"></a>
|
|
A simple command is the kind of command encountered most often.
|
|
It's just a sequence of words separated by <code>blank</code>s, terminated
|
|
by one of the shell's control operators (see <a href="#Definitions">Definitions</a>). The
|
|
first word generally specifies a command to be executed, with the
|
|
rest of the words being that command's arguments.
|
|
|
|
<p>The return status (see <a href="#Exit-Status">Exit Status</a>) of a simple command is
|
|
its exit status as provided
|
|
by the <span class="sc">posix</span> 1003.1 <code>waitpid</code> function, or 128+<var>n</var> if
|
|
the command was terminated by signal <var>n</var>.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Pipelines"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Lists">Lists</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Simple-Commands">Simple Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Commands">Shell Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.2.2 Pipelines</h4>
|
|
|
|
<p><a name="index-pipeline-34"></a><a name="index-commands_002c-pipelines-35"></a>
|
|
A <code>pipeline</code> is a sequence of simple commands separated by
|
|
`<samp><span class="samp">|</span></samp>'.
|
|
|
|
<p><a name="index-time-36"></a><a name="index-g_t_0021-37"></a><a name="index-command-timing-38"></a>The format for a pipeline is
|
|
<pre class="example"> [<code>time</code> [<code>-p</code>]] [<code>!</code>] <var>command1</var> [<code>|</code> <var>command2</var> ...]
|
|
</pre>
|
|
<p class="noindent">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.
|
|
|
|
<p>The reserved word <code>time</code> 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 <samp><span class="option">-p</span></samp> option changes the output format to that specified
|
|
by <span class="sc">posix</span>.
|
|
The <samp><span class="env">TIMEFORMAT</span></samp> variable may be set to a format string that
|
|
specifies how the timing information should be displayed.
|
|
See <a href="#Bash-Variables">Bash Variables</a>, for a description of the available formats.
|
|
The use of <code>time</code> as a reserved word permits the timing of
|
|
shell builtins, shell functions, and pipelines. An external
|
|
<code>time</code> command cannot time these easily.
|
|
|
|
<p>If the pipeline is not executed asynchronously (see <a href="#Lists">Lists</a>), the
|
|
shell waits for all commands in the pipeline to complete.
|
|
|
|
<p>Each command in a pipeline is executed in its own subshell
|
|
(see <a href="#Command-Execution-Environment">Command Execution Environment</a>). The exit
|
|
status of a pipeline is the exit status of the last command in the
|
|
pipeline, unless the <code>pipefail</code> option is enabled
|
|
(see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
If <code>pipefail</code> 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 `<samp><span class="samp">!</span></samp>' 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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Lists"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Compound-Commands">Compound Commands</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Pipelines">Pipelines</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Commands">Shell Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.2.3 Lists of Commands</h4>
|
|
|
|
<p><a name="index-commands_002c-lists-39"></a>
|
|
A <code>list</code> is a sequence of one or more pipelines separated by one
|
|
of the operators `<samp><span class="samp">;</span></samp>', `<samp><span class="samp">&</span></samp>', `<samp><span class="samp">&&</span></samp>', or `<samp><span class="samp">||</span></samp>',
|
|
and optionally terminated by one of `<samp><span class="samp">;</span></samp>', `<samp><span class="samp">&</span></samp>', or a
|
|
<code>newline</code>.
|
|
|
|
<p>Of these list operators, `<samp><span class="samp">&&</span></samp>' and `<samp><span class="samp">||</span></samp>'
|
|
have equal precedence, followed by `<samp><span class="samp">;</span></samp>' and `<samp><span class="samp">&</span></samp>',
|
|
which have equal precedence.
|
|
|
|
<p>A sequence of one or more newlines may appear in a <code>list</code>
|
|
to delimit commands, equivalent to a semicolon.
|
|
|
|
<p>If a command is terminated by the control operator `<samp><span class="samp">&</span></samp>',
|
|
the shell executes the command asynchronously in a subshell.
|
|
This is known as executing the command in the <var>background</var>.
|
|
The shell does not wait for the command to finish, and the return
|
|
status is 0 (true).
|
|
When job control is not active (see <a href="#Job-Control">Job Control</a>),
|
|
the standard input for asynchronous commands, in the absence of any
|
|
explicit redirections, is redirected from <code>/dev/null</code>.
|
|
|
|
<p>Commands separated by a `<samp><span class="samp">;</span></samp>' 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.
|
|
|
|
<p>The control operators `<samp><span class="samp">&&</span></samp>' and `<samp><span class="samp">||</span></samp>'
|
|
denote <span class="sc">and</span> lists and <span class="sc">or</span> lists, respectively.
|
|
An <span class="sc">and</span> list has the form
|
|
<pre class="example"> <var>command1</var> && <var>command2</var>
|
|
</pre>
|
|
<p class="noindent"><var>command2</var> is executed if, and only if, <var>command1</var>
|
|
returns an exit status of zero.
|
|
|
|
<p>An <span class="sc">or</span> list has the form
|
|
<pre class="example"> <var>command1</var> || <var>command2</var>
|
|
</pre>
|
|
<p class="noindent"><var>command2</var> is executed if, and only if, <var>command1</var>
|
|
returns a non-zero exit status.
|
|
|
|
<p>The return status of
|
|
<span class="sc">and</span> and <span class="sc">or</span> lists is the exit status of the last command
|
|
executed in the list.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Compound-Commands"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Lists">Lists</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Commands">Shell Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.2.4 Compound Commands</h4>
|
|
|
|
<p><a name="index-commands_002c-compound-40"></a>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Looping-Constructs">Looping Constructs</a>: Shell commands for iterative action.
|
|
<li><a accesskey="2" href="#Conditional-Constructs">Conditional Constructs</a>: Shell commands for conditional execution.
|
|
<li><a accesskey="3" href="#Command-Grouping">Command Grouping</a>: Ways to group commands.
|
|
</ul>
|
|
|
|
<p>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 (see <a href="#Redirections">Redirections</a>) associated with a compound command
|
|
apply to all commands within that compound command unless explicitly overridden.
|
|
|
|
<p>Bash provides looping constructs, conditional commands, and mechanisms
|
|
to group commands and execute them as a unit.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Looping-Constructs"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Conditional-Constructs">Conditional Constructs</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Compound-Commands">Compound Commands</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.2.4.1 Looping Constructs</h5>
|
|
|
|
<p><a name="index-commands_002c-looping-41"></a>
|
|
Bash supports the following looping constructs.
|
|
|
|
<p>Note that wherever a `<samp><span class="samp">;</span></samp>' appears in the description of a
|
|
command's syntax, it may be replaced with one or more newlines.
|
|
|
|
<dl>
|
|
<dt><code>until</code><dd><a name="index-until-42"></a><a name="index-do-43"></a><a name="index-done-44"></a>The syntax of the <code>until</code> command is:
|
|
<pre class="example"> until <var>test-commands</var>; do <var>consequent-commands</var>; done
|
|
</pre>
|
|
<p>Execute <var>consequent-commands</var> as long as
|
|
<var>test-commands</var> has an exit status which is not zero.
|
|
The return status is the exit status of the last command executed
|
|
in <var>consequent-commands</var>, or zero if none was executed.
|
|
|
|
<br><dt><code>while</code><dd><a name="index-while-45"></a>The syntax of the <code>while</code> command is:
|
|
<pre class="example"> while <var>test-commands</var>; do <var>consequent-commands</var>; done
|
|
</pre>
|
|
<p>Execute <var>consequent-commands</var> as long as
|
|
<var>test-commands</var> has an exit status of zero.
|
|
The return status is the exit status of the last command executed
|
|
in <var>consequent-commands</var>, or zero if none was executed.
|
|
|
|
<br><dt><code>for</code><dd><a name="index-for-46"></a>The syntax of the <code>for</code> command is:
|
|
|
|
<pre class="example"> for <var>name</var> [in <var>words</var> ...]; do <var>commands</var>; done
|
|
</pre>
|
|
<p>Expand <var>words</var>, and execute <var>commands</var> once for each member
|
|
in the resultant list, with <var>name</var> bound to the current member.
|
|
If `<samp><span class="samp">in </span><var>words</var></samp>' is not present, the <code>for</code> command
|
|
executes the <var>commands</var> once for each positional parameter that is
|
|
set, as if `<samp><span class="samp">in "$@"</span></samp>' had been specified
|
|
(see <a href="#Special-Parameters">Special Parameters</a>).
|
|
The return status is the exit status of the last command that executes.
|
|
If there are no items in the expansion of <var>words</var>, no commands are
|
|
executed, and the return status is zero.
|
|
|
|
<p>An alternate form of the <code>for</code> command is also supported:
|
|
|
|
<pre class="example"> for (( <var>expr1</var> ; <var>expr2</var> ; <var>expr3</var> )) ; do <var>commands</var> ; done
|
|
</pre>
|
|
<p>First, the arithmetic expression <var>expr1</var> is evaluated according
|
|
to the rules described below (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
The arithmetic expression <var>expr2</var> is then evaluated repeatedly
|
|
until it evaluates to zero.
|
|
Each time <var>expr2</var> evaluates to a non-zero value, <var>commands</var> are
|
|
executed and the arithmetic expression <var>expr3</var> 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 <var>list</var>
|
|
that is executed, or false if any of the expressions is invalid.
|
|
|
|
</dl>
|
|
|
|
<p>The <code>break</code> and <code>continue</code> builtins (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
may be used to control loop execution.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Conditional-Constructs"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Command-Grouping">Command Grouping</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Looping-Constructs">Looping Constructs</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Compound-Commands">Compound Commands</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.2.4.2 Conditional Constructs</h5>
|
|
|
|
<p><a name="index-commands_002c-conditional-47"></a>
|
|
<dl>
|
|
<dt><code>if</code><dd><a name="index-if-48"></a><a name="index-then-49"></a><a name="index-else-50"></a><a name="index-elif-51"></a><a name="index-fi-52"></a>The syntax of the <code>if</code> command is:
|
|
|
|
<pre class="example"> if <var>test-commands</var>; then
|
|
<var>consequent-commands</var>;
|
|
[elif <var>more-test-commands</var>; then
|
|
<var>more-consequents</var>;]
|
|
[else <var>alternate-consequents</var>;]
|
|
fi
|
|
</pre>
|
|
<p>The <var>test-commands</var> list is executed, and if its return status is zero,
|
|
the <var>consequent-commands</var> list is executed.
|
|
If <var>test-commands</var> returns a non-zero status, each <code>elif</code> list
|
|
is executed in turn, and if its exit status is zero,
|
|
the corresponding <var>more-consequents</var> is executed and the
|
|
command completes.
|
|
If `<samp><span class="samp">else </span><var>alternate-consequents</var></samp>' is present, and
|
|
the final command in the final <code>if</code> or <code>elif</code> clause
|
|
has a non-zero exit status, then <var>alternate-consequents</var> is executed.
|
|
The return status is the exit status of the last command executed, or
|
|
zero if no condition tested true.
|
|
|
|
<br><dt><code>case</code><dd><a name="index-case-53"></a><a name="index-in-54"></a><a name="index-esac-55"></a>The syntax of the <code>case</code> command is:
|
|
|
|
<pre class="example"> <code>case </code><var>word</var><code> in [ [(] </code><var>pattern</var><code> [| </code><var>pattern</var><code>]...) </code><var>command-list</var><code> ;;]... esac</code>
|
|
</pre>
|
|
<p><code>case</code> will selectively execute the <var>command-list</var> corresponding to
|
|
the first <var>pattern</var> that matches <var>word</var>.
|
|
If the shell option <code>nocasematch</code>
|
|
(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, the match is performed without regard to the case
|
|
of alphabetic characters.
|
|
The `<samp><span class="samp">|</span></samp>' is used to separate multiple patterns, and the `<samp><span class="samp">)</span></samp>'
|
|
operator terminates a pattern list.
|
|
A list of patterns and an associated command-list is known
|
|
as a <var>clause</var>. Each clause must be terminated with `<samp><span class="samp">;;</span></samp>'.
|
|
The <var>word</var> undergoes tilde expansion, parameter expansion, command
|
|
substitution, arithmetic expansion, and quote removal before matching is
|
|
attempted. Each <var>pattern</var> undergoes tilde expansion, parameter
|
|
expansion, command substitution, and arithmetic expansion.
|
|
|
|
<p>There may be an arbitrary number of <code>case</code> clauses, each terminated
|
|
by a `<samp><span class="samp">;;</span></samp>'. The first pattern that matches determines the
|
|
command-list that is executed.
|
|
|
|
<p>Here is an example using <code>case</code> in a script that could be used to
|
|
describe one interesting feature of an animal:
|
|
|
|
<pre class="example"> 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."
|
|
</pre>
|
|
<p class="noindent">The return status is zero if no <var>pattern</var> is matched. Otherwise, the
|
|
return status is the exit status of the <var>command-list</var> executed.
|
|
|
|
<br><dt><code>select</code><dd><a name="index-select-56"></a>
|
|
The <code>select</code> construct allows the easy generation of menus.
|
|
It has almost the same syntax as the <code>for</code> command:
|
|
|
|
<pre class="example"> select <var>name</var> [in <var>words</var> ...]; do <var>commands</var>; done
|
|
</pre>
|
|
<p>The list of words following <code>in</code> 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
|
|
`<samp><span class="samp">in </span><var>words</var></samp>' is omitted, the positional parameters are printed,
|
|
as if `<samp><span class="samp">in "$@"</span></samp>' had been specified.
|
|
The <samp><span class="env">PS3</span></samp> 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 <var>name</var> is set to that word.
|
|
If the line is empty, the words and prompt are displayed again.
|
|
If <code>EOF</code> is read, the <code>select</code> command completes.
|
|
Any other value read causes <var>name</var> to be set to null.
|
|
The line read is saved in the variable <samp><span class="env">REPLY</span></samp>.
|
|
|
|
<p>The <var>commands</var> are executed after each selection until a
|
|
<code>break</code> command is executed, at which
|
|
point the <code>select</code> command completes.
|
|
|
|
<p>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.
|
|
|
|
<pre class="example"> select fname in *;
|
|
do
|
|
echo you picked $fname \($REPLY\)
|
|
break;
|
|
done
|
|
</pre>
|
|
<br><dt><code>((...))</code><dd>
|
|
<pre class="example"> (( <var>expression</var> ))
|
|
</pre>
|
|
<p>The arithmetic <var>expression</var> is evaluated according to the rules
|
|
described below (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
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
|
|
<pre class="example"> let "<var>expression</var>"
|
|
</pre>
|
|
<p class="noindent">See <a href="#Bash-Builtins">Bash Builtins</a>, for a full description of the <code>let</code> builtin.
|
|
|
|
<br><dt><code>[[...]]</code><dd><a name="index-g_t_005b_005b-57"></a><a name="index-g_t_005d_005d-58"></a>
|
|
<pre class="example"> [[ <var>expression</var> ]]
|
|
</pre>
|
|
<p>Return a status of 0 or 1 depending on the evaluation of
|
|
the conditional expression <var>expression</var>.
|
|
Expressions are composed of the primaries described below in
|
|
<a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>.
|
|
Word splitting and filename expansion are not performed on the words
|
|
between the `<samp><span class="samp">[[</span></samp>' and `<samp><span class="samp">]]</span></samp>'; tilde expansion, parameter and
|
|
variable expansion, arithmetic expansion, command substitution, process
|
|
substitution, and quote removal are performed.
|
|
Conditional operators such as `<samp><span class="samp">-f</span></samp>' must be unquoted to be recognized
|
|
as primaries.
|
|
|
|
<p>When the `<samp><span class="samp">==</span></samp>' and `<samp><span class="samp">!=</span></samp>' operators are used, the string to the
|
|
right of the operator is considered a pattern and matched according
|
|
to the rules described below in <a href="#Pattern-Matching">Pattern Matching</a>.
|
|
If the shell option <code>nocasematch</code>
|
|
(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, the match is performed without regard to the case
|
|
of alphabetic characters.
|
|
The return value is 0 if the string matches (`<samp><span class="samp">==</span></samp>') or does not
|
|
match (`<samp><span class="samp">!=</span></samp>')the pattern, and 1 otherwise.
|
|
Any part of the pattern may be quoted to force it to be matched as a
|
|
string.
|
|
|
|
<p>An additional binary operator, `<samp><span class="samp">=~</span></samp>', is available, with the same
|
|
precedence as `<samp><span class="samp">==</span></samp>' and `<samp><span class="samp">!=</span></samp>'.
|
|
When it is used, the string to the right of the operator is considered
|
|
an extended regular expression and matched accordingly (as in <i>regex</i>3)).
|
|
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 <code>nocasematch</code>
|
|
(see the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
is enabled, the match is performed without regard to the case
|
|
of alphabetic characters.
|
|
Substrings matched by parenthesized subexpressions within the regular
|
|
expression are saved in the array variable <code>BASH_REMATCH</code>.
|
|
The element of <code>BASH_REMATCH</code> with index 0 is the portion of the string
|
|
matching the entire regular expression.
|
|
The element of <code>BASH_REMATCH</code> with index <var>n</var> is the portion of the
|
|
string matching the <var>n</var>th parenthesized subexpression.
|
|
|
|
<p>Expressions may be combined using the following operators, listed
|
|
in decreasing order of precedence:
|
|
|
|
<dl>
|
|
<dt><code>( </code><var>expression</var><code> )</code><dd>Returns the value of <var>expression</var>.
|
|
This may be used to override the normal precedence of operators.
|
|
|
|
<br><dt><code>! </code><var>expression</var><dd>True if <var>expression</var> is false.
|
|
|
|
<br><dt><var>expression1</var><code> && </code><var>expression2</var><dd>True if both <var>expression1</var> and <var>expression2</var> are true.
|
|
|
|
<br><dt><var>expression1</var><code> || </code><var>expression2</var><dd>True if either <var>expression1</var> or <var>expression2</var> is true.
|
|
</dl>
|
|
The <code>&&</code> and <code>||</code> operators do not evaluate <var>expression2</var> if the
|
|
value of <var>expression1</var> is sufficient to determine the return
|
|
value of the entire conditional expression.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Command-Grouping"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Conditional-Constructs">Conditional Constructs</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Compound-Commands">Compound Commands</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.2.4.3 Grouping Commands</h5>
|
|
|
|
<p><a name="index-commands_002c-grouping-59"></a>
|
|
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.
|
|
|
|
<dl>
|
|
<dt><code>()</code><dd>
|
|
<pre class="example"> ( <var>list</var> )
|
|
</pre>
|
|
<p>Placing a list of commands between parentheses causes a subshell
|
|
environment to be created (see <a href="#Command-Execution-Environment">Command Execution Environment</a>), and each
|
|
of the commands in <var>list</var> to be executed in that subshell. Since the
|
|
<var>list</var> is executed in a subshell, variable assignments do not remain in
|
|
effect after the subshell completes.
|
|
|
|
<br><dt><code>{}</code><dd><a name="index-g_t_0040_007b-60"></a><a name="index-g_t_0040_007d-61"></a>
|
|
<pre class="example"> { <var>list</var>; }
|
|
</pre>
|
|
<p>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 <var>list</var> is required.
|
|
</dl>
|
|
|
|
<p>In addition to the creation of a subshell, there is a subtle difference
|
|
between these two constructs due to historical reasons. The braces
|
|
are <code>reserved words</code>, so they must be separated from the <var>list</var>
|
|
by <code>blank</code>s. The parentheses are <code>operators</code>, and are
|
|
recognized as separate tokens by the shell even if they are not separated
|
|
from the <var>list</var> by whitespace.
|
|
|
|
<p>The exit status of both of these constructs is the exit status of
|
|
<var>list</var>.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Functions"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Parameters">Shell Parameters</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Commands">Shell Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.3 Shell Functions</h3>
|
|
|
|
<p><a name="index-shell-function-62"></a><a name="index-functions_002c-shell-63"></a>
|
|
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.
|
|
|
|
<p>Functions are declared using this syntax:
|
|
<a name="index-function-64"></a>
|
|
<pre class="example"> [ <code>function</code> ] <var>name</var> () <var>compound-command</var> [ <var>redirections</var> ]
|
|
</pre>
|
|
<p>This defines a shell function named <var>name</var>. The reserved
|
|
word <code>function</code> is optional.
|
|
If the <code>function</code> reserved
|
|
word is supplied, the parentheses are optional.
|
|
The <var>body</var> of the function is the compound command
|
|
<var>compound-command</var> (see <a href="#Compound-Commands">Compound Commands</a>).
|
|
That command is usually a <var>list</var> enclosed between { and }, but
|
|
may be any compound command listed above.
|
|
<var>compound-command</var> is executed whenever <var>name</var> is specified as the
|
|
name of a command.
|
|
Any redirections (see <a href="#Redirections">Redirections</a>) associated with the shell function
|
|
are performed when the function is executed.
|
|
|
|
<p>A function definition may be deleted using the <samp><span class="option">-f</span></samp> option to the
|
|
<code>unset</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
<p>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.
|
|
|
|
<p>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
|
|
<code>blank</code>s or newlines.
|
|
This is because the braces are reserved words and are only recognized
|
|
as such when they are separated by whitespace.
|
|
Also, when using the braces, the <var>list</var> must be terminated by a semicolon,
|
|
a `<samp><span class="samp">&</span></samp>', or a newline.
|
|
|
|
<p>When a function is executed, the arguments to the
|
|
function become the positional parameters
|
|
during its execution (see <a href="#Positional-Parameters">Positional Parameters</a>).
|
|
The special parameter `<samp><span class="samp">#</span></samp>' that expands to the number of
|
|
positional parameters is updated to reflect the change.
|
|
Special parameter <code>0</code> is unchanged.
|
|
The first element of the <samp><span class="env">FUNCNAME</span></samp> 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 the exception that the <samp><span class="env">DEBUG</span></samp> and <samp><span class="env">RETURN</span></samp> traps
|
|
are not inherited unless the function has been given the
|
|
<code>trace</code> attribute using the <code>declare</code> builtin or
|
|
the <code>-o functrace</code> option has been enabled with
|
|
the <code>set</code> builtin,
|
|
(in which case all functions inherit the <samp><span class="env">DEBUG</span></samp> and <samp><span class="env">RETURN</span></samp> traps).
|
|
See <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>, for the description of the
|
|
<code>trap</code> builtin.
|
|
|
|
<p>If the builtin command <code>return</code>
|
|
is executed in a function, the function completes and
|
|
execution resumes with the next command after the function
|
|
call.
|
|
Any command associated with the <code>RETURN</code> trap is executed
|
|
before execution resumes.
|
|
When a function completes, the values of the
|
|
positional parameters and the special parameter `<samp><span class="samp">#</span></samp>'
|
|
are restored to the values they had prior to the function's
|
|
execution. If a numeric argument is given to <code>return</code>,
|
|
that is the function's return status; otherwise the function's
|
|
return status is the exit status of the last command executed
|
|
before the <code>return</code>.
|
|
|
|
<p>Variables local to the function may be declared with the
|
|
<code>local</code> builtin. These variables are visible only to
|
|
the function and the commands it invokes.
|
|
|
|
<p>Function names and definitions may be listed with the
|
|
<samp><span class="option">-f</span></samp> option to the <code>declare</code> or <code>typeset</code>
|
|
builtin commands (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
The <samp><span class="option">-F</span></samp> option to <code>declare</code> or <code>typeset</code>
|
|
will list the function names only
|
|
(and optionally the source file and line number, if the <code>extdebug</code>
|
|
shell option is enabled).
|
|
Functions may be exported so that subshells
|
|
automatically have them defined with the
|
|
<samp><span class="option">-f</span></samp> option to the <code>export</code> builtin
|
|
(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
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.
|
|
|
|
<p>Functions may be recursive. No limit is placed on the number of
|
|
recursive calls.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Parameters"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Expansions">Shell Expansions</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Functions">Shell Functions</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.4 Shell Parameters</h3>
|
|
|
|
<p><a name="index-parameters-65"></a><a name="index-variable_002c-shell-66"></a><a name="index-shell-variable-67"></a>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Positional-Parameters">Positional Parameters</a>: The shell's command-line arguments.
|
|
<li><a accesskey="2" href="#Special-Parameters">Special Parameters</a>: Parameters denoted by special characters.
|
|
</ul>
|
|
|
|
<p>A <var>parameter</var> is an entity that stores values.
|
|
It can be a <code>name</code>, a number, or one of the special characters
|
|
listed below.
|
|
A <var>variable</var> is a parameter denoted by a <code>name</code>.
|
|
A variable has a <var>value</var> and zero or more <var>attributes</var>.
|
|
Attributes are assigned using the <code>declare</code> builtin command
|
|
(see the description of the <code>declare</code> builtin in <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<p>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 <code>unset</code> builtin command.
|
|
|
|
<p>A variable may be assigned to by a statement of the form
|
|
<pre class="example"> <var>name</var>=[<var>value</var>]
|
|
</pre>
|
|
<p class="noindent">If <var>value</var>
|
|
is not given, the variable is assigned the null string. All
|
|
<var>value</var>s undergo tilde expansion, parameter and variable expansion,
|
|
command substitution, arithmetic expansion, and quote
|
|
removal (detailed below). If the variable has its <code>integer</code>
|
|
attribute set, then <var>value</var>
|
|
is evaluated as an arithmetic expression even if the <code>$((...))</code>
|
|
expansion is not used (see <a href="#Arithmetic-Expansion">Arithmetic Expansion</a>).
|
|
Word splitting is not performed, with the exception
|
|
of <code>"$@"</code> as explained below.
|
|
Filename expansion is not performed.
|
|
Assignment statements may also appear as arguments to the
|
|
<code>alias</code>,
|
|
<code>declare</code>, <code>typeset</code>, <code>export</code>, <code>readonly</code>,
|
|
and <code>local</code> builtin commands.
|
|
|
|
<p>In the context where an assignment statement is assigning a value
|
|
to a shell variable or array index (see <a href="#Arrays">Arrays</a>), the `<samp><span class="samp">+=</span></samp>'
|
|
operator can be used to
|
|
append to or add to the variable's previous value.
|
|
When `<samp><span class="samp">+=</span></samp>' is applied to a variable for which the integer attribute
|
|
has been set, <var>value</var> is evaluated as an arithmetic expression and
|
|
added to the variable's current value, which is also evaluated.
|
|
When `<samp><span class="samp">+=</span></samp>' is applied to an array variable using compound assignment
|
|
(see <a href="#Arrays">Arrays</a>), the
|
|
variable's value is not unset (as it is when using `<samp><span class="samp">=</span></samp>'), and new
|
|
values are appended to the array beginning at one greater than the array's
|
|
maximum index.
|
|
When applied to a string-valued variable, <var>value</var> is expanded and
|
|
appended to the variable's value.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Positional-Parameters"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Special-Parameters">Special Parameters</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Parameters">Shell Parameters</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.4.1 Positional Parameters</h4>
|
|
|
|
<p><a name="index-parameters_002c-positional-68"></a>
|
|
A <var>positional parameter</var> is a parameter denoted by one or more
|
|
digits, other than the single digit <code>0</code>. Positional parameters are
|
|
assigned from the shell's arguments when it is invoked,
|
|
and may be reassigned using the <code>set</code> builtin command.
|
|
Positional parameter <code>N</code> may be referenced as <code>${N}</code>, or
|
|
as <code>$N</code> when <code>N</code> consists of a single digit.
|
|
Positional parameters may not be assigned to with assignment statements.
|
|
The <code>set</code> and <code>shift</code> builtins are used to set and
|
|
unset them (see <a href="#Shell-Builtin-Commands">Shell Builtin Commands</a>).
|
|
The positional parameters are
|
|
temporarily replaced when a shell function is executed
|
|
(see <a href="#Shell-Functions">Shell Functions</a>).
|
|
|
|
<p>When a positional parameter consisting of more than a single
|
|
digit is expanded, it must be enclosed in braces.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Special-Parameters"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Positional-Parameters">Positional Parameters</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Parameters">Shell Parameters</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.4.2 Special Parameters</h4>
|
|
|
|
<p><a name="index-parameters_002c-special-69"></a>
|
|
The shell treats several parameters specially. These parameters may
|
|
only be referenced; assignment to them is not allowed.
|
|
|
|
<dl>
|
|
<dt><code>*</code><a name="index-g_t_002a-70"></a><dd>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 <samp><span class="env">IFS</span></samp>
|
|
special variable. That is, <code>"$*"</code> is equivalent
|
|
to <code>"$1</code><var>c</var><code>$2</code><var>c</var><code>..."</code>, where <var>c</var>
|
|
is the first character of the value of the <code>IFS</code>
|
|
variable.
|
|
If <samp><span class="env">IFS</span></samp> is unset, the parameters are separated by spaces.
|
|
If <samp><span class="env">IFS</span></samp> is null, the parameters are joined without intervening
|
|
separators.
|
|
|
|
<br><dt><code>@</code><a name="index-g_t_0040_0040-71"></a><dd>Expands to the positional parameters, starting from one. When the
|
|
expansion occurs within double quotes, each parameter expands to a
|
|
separate word. That is, <code>"$@"</code> is equivalent to
|
|
<code>"$1" "$2" ...</code>.
|
|
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, <code>"$@"</code> and
|
|
<code>$@</code>
|
|
expand to nothing (i.e., they are removed).
|
|
|
|
<br><dt><code>#</code><a name="index-g_t_0023-72"></a><dd>Expands to the number of positional parameters in decimal.
|
|
|
|
<br><dt><code>?</code><a name="index-g_t_003f-73"></a><dd>Expands to the exit status of the most recently executed foreground
|
|
pipeline.
|
|
|
|
<br><dt><code>-</code><a name="index-g_t_002d-74"></a><dd>(A hyphen.) Expands to the current option flags as specified upon
|
|
invocation, by the <code>set</code>
|
|
builtin command, or those set by the shell itself
|
|
(such as the <samp><span class="option">-i</span></samp> option).
|
|
|
|
<br><dt><code>$</code><a name="index-g_t_0024-75"></a><dd>Expands to the process <span class="sc">id</span> of the shell. In a <code>()</code> subshell, it
|
|
expands to the process <span class="sc">id</span> of the invoking shell, not the subshell.
|
|
|
|
<br><dt><code>!</code><a name="index-g_t_0021-76"></a><dd>Expands to the process <span class="sc">id</span> of the most recently executed background
|
|
(asynchronous) command.
|
|
|
|
<br><dt><code>0</code><a name="index-g_t0-77"></a><dd>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
|
|
(see <a href="#Shell-Scripts">Shell Scripts</a>), <code>$0</code> is set to the name of that file.
|
|
If Bash is started with the <samp><span class="option">-c</span></samp> option (see <a href="#Invoking-Bash">Invoking Bash</a>),
|
|
then <code>$0</code> 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.
|
|
|
|
<br><dt><code>_</code><a name="index-g_t_005f-78"></a><dd>(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.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Expansions"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Redirections">Redirections</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Parameters">Shell Parameters</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.5 Shell Expansions</h3>
|
|
|
|
<p><a name="index-expansion-79"></a>
|
|
Expansion is performed on the command line after it has been split into
|
|
<code>token</code>s. There are seven kinds of expansion performed:
|
|
<ul>
|
|
<li>brace expansion
|
|
<li>tilde expansion
|
|
<li>parameter and variable expansion
|
|
<li>command substitution
|
|
<li>arithmetic expansion
|
|
<li>word splitting
|
|
<li>filename expansion
|
|
</ul>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Brace-Expansion">Brace Expansion</a>: Expansion of expressions within braces.
|
|
<li><a accesskey="2" href="#Tilde-Expansion">Tilde Expansion</a>: Expansion of the ~ character.
|
|
<li><a accesskey="3" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>: How Bash expands variables to their values.
|
|
<li><a accesskey="4" href="#Command-Substitution">Command Substitution</a>: Using the output of a command as an argument.
|
|
<li><a accesskey="5" href="#Arithmetic-Expansion">Arithmetic Expansion</a>: How to use arithmetic in shell expansions.
|
|
<li><a accesskey="6" href="#Process-Substitution">Process Substitution</a>: A way to write and read to and from a
|
|
command.
|
|
<li><a accesskey="7" href="#Word-Splitting">Word Splitting</a>: How the results of expansion are split into separate
|
|
arguments.
|
|
<li><a accesskey="8" href="#Filename-Expansion">Filename Expansion</a>: A shorthand for specifying filenames matching patterns.
|
|
<li><a accesskey="9" href="#Quote-Removal">Quote Removal</a>: How and when quote characters are removed from
|
|
words.
|
|
</ul>
|
|
|
|
<p>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.
|
|
|
|
<p>On systems that can support it, there is an additional expansion
|
|
available: <var>process substitution</var>. This is performed at the
|
|
same time as parameter, variable, and arithmetic expansion and
|
|
command substitution.
|
|
|
|
<p>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
|
|
<code>"$@"</code> (see <a href="#Special-Parameters">Special Parameters</a>) and <code>"${</code><var>name</var><code>[@]}"</code>
|
|
(see <a href="#Arrays">Arrays</a>).
|
|
|
|
<p>After all expansions, <code>quote removal</code> (see <a href="#Quote-Removal">Quote Removal</a>)
|
|
is performed.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Brace-Expansion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Tilde-Expansion">Tilde Expansion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.1 Brace Expansion</h4>
|
|
|
|
<p><a name="index-brace-expansion-80"></a><a name="index-expansion_002c-brace-81"></a>
|
|
Brace expansion is a mechanism by which arbitrary strings may be generated.
|
|
This mechanism is similar to
|
|
<var>filename expansion</var> (see <a href="#Filename-Expansion">Filename Expansion</a>),
|
|
but the file names generated need not exist.
|
|
Patterns to be brace expanded take the form of an optional <var>preamble</var>,
|
|
followed by either a series of comma-separated strings or a seqeunce expression
|
|
between a pair of braces,
|
|
followed by an optional <var>postscript</var>.
|
|
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.
|
|
|
|
<p>Brace expansions may be nested.
|
|
The results of each expanded string are not sorted; left to right order
|
|
is preserved.
|
|
For example,
|
|
<pre class="example"> bash$ echo a{d,c,b}e
|
|
ade ace abe
|
|
</pre>
|
|
<p>A sequence expression takes the form <code>{</code><var>x</var><code>..</code><var>y</var><code>}</code>,
|
|
where <var>x</var> and <var>y</var> are either integers or single characters.
|
|
When integers are supplied, the expression expands to each number between
|
|
<var>x</var> and <var>y</var>, inclusive.
|
|
When characters are supplied, the expression expands to each character
|
|
lexicographically between <var>x</var> and <var>y</var>, inclusive. Note that
|
|
both <var>x</var> and <var>y</var> must be of the same type.
|
|
|
|
<p>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 `<samp><span class="samp">${</span></samp>'
|
|
is not considered eligible for brace expansion.
|
|
|
|
<p>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.
|
|
|
|
<p>A { or `<samp><span class="samp">,</span></samp>' may be quoted with a backslash to prevent its
|
|
being considered part of a brace expression.
|
|
To avoid conflicts with parameter expansion, the string `<samp><span class="samp">${</span></samp>'
|
|
is not considered eligible for brace expansion.
|
|
|
|
<p>This construct is typically used as shorthand when the common
|
|
prefix of the strings to be generated is longer than in the
|
|
above example:
|
|
<pre class="example"> mkdir /usr/local/src/bash/{old,new,dist,bugs}
|
|
</pre>
|
|
<p>or
|
|
<pre class="example"> chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
|
|
</pre>
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Tilde-Expansion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Brace-Expansion">Brace Expansion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.2 Tilde Expansion</h4>
|
|
|
|
<p><a name="index-tilde-expansion-82"></a><a name="index-expansion_002c-tilde-83"></a>
|
|
If a word begins with an unquoted tilde character (`<samp><span class="samp">~</span></samp>'), all of the
|
|
characters up to the first unquoted slash (or all characters,
|
|
if there is no unquoted slash) are considered a <var>tilde-prefix</var>.
|
|
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 <var>login name</var>.
|
|
If this login name is the null string, the tilde is replaced with the
|
|
value of the <samp><span class="env">HOME</span></samp> shell variable.
|
|
If <samp><span class="env">HOME</span></samp> 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.
|
|
|
|
<p>If the tilde-prefix is `<samp><span class="samp">~+</span></samp>', the value of
|
|
the shell variable <samp><span class="env">PWD</span></samp> replaces the tilde-prefix.
|
|
If the tilde-prefix is `<samp><span class="samp">~-</span></samp>', the value of the shell variable
|
|
<samp><span class="env">OLDPWD</span></samp>, if it is set, is substituted.
|
|
|
|
<p>If the characters following the tilde in the tilde-prefix consist of a
|
|
number <var>N</var>, optionally prefixed by a `<samp><span class="samp">+</span></samp>' or a `<samp><span class="samp">-</span></samp>',
|
|
the tilde-prefix is replaced with the
|
|
corresponding element from the directory stack, as it would be displayed
|
|
by the <code>dirs</code> builtin invoked with the characters following tilde
|
|
in the tilde-prefix as an argument (see <a href="#The-Directory-Stack">The Directory Stack</a>).
|
|
If the tilde-prefix, sans the tilde, consists of a number without a
|
|
leading `<samp><span class="samp">+</span></samp>' or `<samp><span class="samp">-</span></samp>', `<samp><span class="samp">+</span></samp>' is assumed.
|
|
|
|
<p>If the login name is invalid, or the tilde expansion fails, the word is
|
|
left unchanged.
|
|
|
|
<p>Each variable assignment is checked for unquoted tilde-prefixes immediately
|
|
following a `<samp><span class="samp">:</span></samp>' or the first `<samp><span class="samp">=</span></samp>'.
|
|
In these cases, tilde expansion is also performed.
|
|
Consequently, one may use file names with tildes in assignments to
|
|
<samp><span class="env">PATH</span></samp>, <samp><span class="env">MAILPATH</span></samp>, and <samp><span class="env">CDPATH</span></samp>,
|
|
and the shell assigns the expanded value.
|
|
|
|
<p>The following table shows how Bash treats unquoted tilde-prefixes:
|
|
|
|
<dl>
|
|
<dt><code>~</code><dd>The value of <code>$HOME</code>
|
|
<br><dt><code>~/foo</code><dd><samp><span class="file">$HOME/foo</span></samp>
|
|
|
|
<br><dt><code>~fred/foo</code><dd>The subdirectory <code>foo</code> of the home directory of the user
|
|
<code>fred</code>
|
|
|
|
<br><dt><code>~+/foo</code><dd><samp><span class="file">$PWD/foo</span></samp>
|
|
|
|
<br><dt><code>~-/foo</code><dd><samp><span class="file">${OLDPWD-'~-'}/foo</span></samp>
|
|
|
|
<br><dt><code>~</code><var>N</var><dd>The string that would be displayed by `<samp><span class="samp">dirs +</span><var>N</var></samp>'
|
|
|
|
<br><dt><code>~+</code><var>N</var><dd>The string that would be displayed by `<samp><span class="samp">dirs +</span><var>N</var></samp>'
|
|
|
|
<br><dt><code>~-</code><var>N</var><dd>The string that would be displayed by `<samp><span class="samp">dirs -</span><var>N</var></samp>'
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Parameter-Expansion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Command-Substitution">Command Substitution</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Tilde-Expansion">Tilde Expansion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.3 Shell Parameter Expansion</h4>
|
|
|
|
<p><a name="index-parameter-expansion-84"></a><a name="index-expansion_002c-parameter-85"></a>
|
|
The `<samp><span class="samp">$</span></samp>' 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.
|
|
|
|
<p>When braces are used, the matching ending brace is the first `<samp><span class="samp">}</span></samp>'
|
|
not escaped by a backslash or within a quoted string, and not within an
|
|
embedded arithmetic expansion, command substitution, or parameter
|
|
expansion.
|
|
|
|
<p>The basic form of parameter expansion is ${<var>parameter</var>}.
|
|
The value of <var>parameter</var> is substituted. The braces are required
|
|
when <var>parameter</var>
|
|
is a positional parameter with more than one digit,
|
|
or when <var>parameter</var>
|
|
is followed by a character that is not to be
|
|
interpreted as part of its name.
|
|
|
|
<p>If the first character of <var>parameter</var> is an exclamation point,
|
|
a level of variable indirection is introduced.
|
|
Bash uses the value of the variable formed from the rest of
|
|
<var>parameter</var> 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 <var>parameter</var> itself.
|
|
This is known as <code>indirect expansion</code>.
|
|
The exceptions to this are the expansions of ${!<var>prefix*</var>}
|
|
and ${!<var>name</var>[@]}
|
|
described below.
|
|
The exclamation point must immediately follow the left brace in order to
|
|
introduce indirection.
|
|
|
|
<p>In each of the cases below, <var>word</var> is subject to tilde expansion,
|
|
parameter expansion, command substitution, and arithmetic expansion.
|
|
|
|
<p>When not performing substring expansion, 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 existence and that the value is not null;
|
|
if the colon is omitted, the operator tests only for existence.
|
|
|
|
<dl>
|
|
<dt><code>${</code><var>parameter</var><code>:−</code><var>word</var><code>}</code><dd>If <var>parameter</var> is unset or null, the expansion of
|
|
<var>word</var> is substituted. Otherwise, the value of
|
|
<var>parameter</var> is substituted.
|
|
|
|
<br><dt><code>${</code><var>parameter</var><code>:=</code><var>word</var><code>}</code><dd>If <var>parameter</var>
|
|
is unset or null, the expansion of <var>word</var>
|
|
is assigned to <var>parameter</var>.
|
|
The value of <var>parameter</var> is then substituted.
|
|
Positional parameters and special parameters may not be assigned to
|
|
in this way.
|
|
|
|
<br><dt><code>${</code><var>parameter</var><code>:?</code><var>word</var><code>}</code><dd>If <var>parameter</var>
|
|
is null or unset, the expansion of <var>word</var> (or a message
|
|
to that effect if <var>word</var>
|
|
is not present) is written to the standard error and the shell, if it
|
|
is not interactive, exits. Otherwise, the value of <var>parameter</var> is
|
|
substituted.
|
|
|
|
<br><dt><code>${</code><var>parameter</var><code>:+</code><var>word</var><code>}</code><dd>If <var>parameter</var>
|
|
is null or unset, nothing is substituted, otherwise the expansion of
|
|
<var>word</var> is substituted.
|
|
|
|
<br><dt><code>${</code><var>parameter</var><code>:</code><var>offset</var><code>}</code><dt><code>${</code><var>parameter</var><code>:</code><var>offset</var><code>:</code><var>length</var><code>}</code><dd>Expands to up to <var>length</var> characters of <var>parameter</var>
|
|
starting at the character specified by <var>offset</var>.
|
|
If <var>length</var> is omitted, expands to the substring of
|
|
<var>parameter</var> starting at the character specified by <var>offset</var>.
|
|
<var>length</var> and <var>offset</var> are arithmetic expressions
|
|
(see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
This is referred to as Substring Expansion.
|
|
|
|
<p><var>length</var> must evaluate to a number greater than or equal to zero.
|
|
If <var>offset</var> evaluates to a number less than zero, the value
|
|
is used as an offset from the end of the value of <var>parameter</var>.
|
|
If <var>parameter</var> is `<samp><span class="samp">@</span></samp>', the result is <var>length</var> positional
|
|
parameters beginning at <var>offset</var>.
|
|
If <var>parameter</var> is an array name indexed by `<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>',
|
|
the result is the <var>length</var>
|
|
members of the array beginning with <code>${</code><var>parameter</var><code>[</code><var>offset</var><code>]}</code>.
|
|
A negative <var>offset</var> is taken relative to one greater than the maximum
|
|
index of the specified array.
|
|
Note that a negative offset must be separated from the colon by at least
|
|
one space to avoid being confused with the `<samp><span class="samp">:-</span></samp>' expansion.
|
|
Substring indexing is zero-based unless the positional parameters
|
|
are used, in which case the indexing starts at 1 by default.
|
|
If <var>offset</var> is 0, and the positional parameters are used, <code>$@</code> is
|
|
prefixed to the list.
|
|
|
|
<br><dt><code>${!</code><var>prefix</var><code>*}</code><dt><code>${!</code><var>prefix</var><code>@}</code><dd>Expands to the names of variables whose names begin with <var>prefix</var>,
|
|
separated by the first character of the <samp><span class="env">IFS</span></samp> special variable.
|
|
When `<samp><span class="samp">@</span></samp>' is used and the expansion appears within double quotes, each
|
|
variable name expands to a separate word.
|
|
|
|
<br><dt><code>${!</code><var>name</var><code>[@]}</code><dt><code>${!</code><var>name</var><code>[*]}</code><dd>If <var>name</var> is an array variable, expands to the list of array indices
|
|
(keys) assigned in <var>name</var>.
|
|
If <var>name</var> is not an array, expands to 0 if <var>name</var> is set and null
|
|
otherwise.
|
|
When `<samp><span class="samp">@</span></samp>' is used and the expansion appears within double quotes, each
|
|
key expands to a separate word.
|
|
|
|
<br><dt><code>${#</code><var>parameter</var><code>}</code><dd>The length in characters of the expanded value of <var>parameter</var> is
|
|
substituted.
|
|
If <var>parameter</var> is `<samp><span class="samp">*</span></samp>' or `<samp><span class="samp">@</span></samp>', the value substituted
|
|
is the number of positional parameters.
|
|
If <var>parameter</var> is an array name subscripted by `<samp><span class="samp">*</span></samp>' or `<samp><span class="samp">@</span></samp>',
|
|
the value substituted is the number of elements in the array.
|
|
|
|
<br><dt><code>${</code><var>parameter</var><code>#</code><var>word</var><code>}</code><dt><code>${</code><var>parameter</var><code>##</code><var>word</var><code>}</code><dd>The <var>word</var>
|
|
is expanded to produce a pattern just as in filename
|
|
expansion (see <a href="#Filename-Expansion">Filename Expansion</a>). If the pattern matches
|
|
the beginning of the expanded value of <var>parameter</var>,
|
|
then the result of the expansion is the expanded value of <var>parameter</var>
|
|
with the shortest matching pattern (the `<samp><span class="samp">#</span></samp>' case) or the
|
|
longest matching pattern (the `<samp><span class="samp">##</span></samp>' case) deleted.
|
|
If <var>parameter</var> is `<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>',
|
|
the pattern removal operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var>parameter</var> is an array variable subscripted with
|
|
`<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>',
|
|
the pattern removal operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
|
|
<br><dt><code>${</code><var>parameter</var><code>%</code><var>word</var><code>}</code><dt><code>${</code><var>parameter</var><code>%%</code><var>word</var><code>}</code><dd>The <var>word</var> is expanded to produce a pattern just as in
|
|
filename expansion.
|
|
If the pattern matches a trailing portion of the expanded value of
|
|
<var>parameter</var>, then the result of the expansion is the value of
|
|
<var>parameter</var> with the shortest matching pattern (the `<samp><span class="samp">%</span></samp>' case)
|
|
or the longest matching pattern (the `<samp><span class="samp">%%</span></samp>' case) deleted.
|
|
If <var>parameter</var> is `<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>',
|
|
the pattern removal operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var>parameter</var>
|
|
is an array variable subscripted with `<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>',
|
|
the pattern removal operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
|
|
<br><dt><code>${</code><var>parameter</var><code>/</code><var>pattern</var><code>/</code><var>string</var><code>}</code><dd>
|
|
The <var>pattern</var> is expanded to produce a pattern just as in
|
|
filename expansion.
|
|
<var>Parameter</var> is expanded and the longest match of <var>pattern</var>
|
|
against its value is replaced with <var>string</var>.
|
|
If <var>pattern</var> begins with `<samp><span class="samp">/</span></samp>', all matches of <var>pattern</var> are
|
|
replaced with <var>string</var>. Normally only the first match is replaced.
|
|
If <var>pattern</var> begins with `<samp><span class="samp">#</span></samp>', it must match at the beginning
|
|
of the expanded value of <var>parameter</var>.
|
|
If <var>pattern</var> begins with `<samp><span class="samp">%</span></samp>', it must match at the end
|
|
of the expanded value of <var>parameter</var>.
|
|
If <var>string</var> is null, matches of <var>pattern</var> are deleted
|
|
and the <code>/</code> following <var>pattern</var> may be omitted.
|
|
If <var>parameter</var> is `<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>',
|
|
the substitution operation is applied to each positional
|
|
parameter in turn, and the expansion is the resultant list.
|
|
If <var>parameter</var>
|
|
is an array variable subscripted with `<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>',
|
|
the substitution operation is applied to each member of the
|
|
array in turn, and the expansion is the resultant list.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Command-Substitution"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Arithmetic-Expansion">Arithmetic Expansion</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.4 Command Substitution</h4>
|
|
|
|
<p><a name="index-command-substitution-86"></a>
|
|
Command substitution allows the output of a command to replace
|
|
the command itself.
|
|
Command substitution occurs when a command is enclosed as follows:
|
|
<pre class="example"> $(<var>command</var>)
|
|
</pre>
|
|
<p class="noindent">or
|
|
<pre class="example"> `<var>command</var>`
|
|
</pre>
|
|
<p class="noindent">Bash performs the expansion by executing <var>command</var> 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 <code>$(cat </code><var>file</var><code>)</code> can be
|
|
replaced by the equivalent but faster <code>$(< </code><var>file</var><code>)</code>.
|
|
|
|
<p>When the old-style backquote form of substitution is used,
|
|
backslash retains its literal meaning except when followed by
|
|
`<samp><span class="samp">$</span></samp>', `<samp><span class="samp">`</span></samp>', or `<samp><span class="samp">\</span></samp>'.
|
|
The first backquote not preceded by a backslash terminates the
|
|
command substitution.
|
|
When using the <code>$(</code><var>command</var><code>)</code> form, all characters between
|
|
the parentheses make up the command; none are treated specially.
|
|
|
|
<p>Command substitutions may be nested. To nest when using the backquoted
|
|
form, escape the inner backquotes with backslashes.
|
|
|
|
<p>If the substitution appears within double quotes, word splitting and
|
|
filename expansion are not performed on the results.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Arithmetic-Expansion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Process-Substitution">Process Substitution</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Command-Substitution">Command Substitution</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.5 Arithmetic Expansion</h4>
|
|
|
|
<p><a name="index-expansion_002c-arithmetic-87"></a><a name="index-arithmetic-expansion-88"></a>
|
|
Arithmetic expansion allows the evaluation of an arithmetic expression
|
|
and the substitution of the result. The format for arithmetic expansion is:
|
|
|
|
<pre class="example"> $(( <var>expression</var> ))
|
|
</pre>
|
|
<p>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 expansion, command
|
|
substitution, and quote removal.
|
|
Arithmetic expansions may be nested.
|
|
|
|
<p>The evaluation is performed according to the rules listed below
|
|
(see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
If the expression is invalid, Bash prints a message indicating
|
|
failure to the standard error and no substitution occurs.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Process-Substitution"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Word-Splitting">Word Splitting</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Arithmetic-Expansion">Arithmetic Expansion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.6 Process Substitution</h4>
|
|
|
|
<p><a name="index-process-substitution-89"></a>
|
|
Process substitution is supported on systems that support named
|
|
pipes (<span class="sc">fifo</span>s) or the <samp><span class="file">/dev/fd</span></samp> method of naming open files.
|
|
It takes the form of
|
|
<pre class="example"> <(<var>list</var>)
|
|
</pre>
|
|
<p class="noindent">or
|
|
<pre class="example"> >(<var>list</var>)
|
|
</pre>
|
|
<p class="noindent">The process <var>list</var> is run with its input or output connected to a
|
|
<span class="sc">fifo</span> or some file in <samp><span class="file">/dev/fd</span></samp>. The name of this file is
|
|
passed as an argument to the current command as the result of the
|
|
expansion. If the <code>>(</code><var>list</var><code>)</code> form is used, writing to
|
|
the file will provide input for <var>list</var>. If the
|
|
<code><(</code><var>list</var><code>)</code> form is used, the file passed as an
|
|
argument should be read to obtain the output of <var>list</var>.
|
|
Note that no space may appear between the <code><</code> or <code>></code>
|
|
and the left parenthesis, otherwise the construct would be interpreted
|
|
as a redirection.
|
|
|
|
<p>When available, process substitution is performed simultaneously with
|
|
parameter and variable expansion, command substitution, and arithmetic
|
|
expansion.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Word-Splitting"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Filename-Expansion">Filename Expansion</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Process-Substitution">Process Substitution</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.7 Word Splitting</h4>
|
|
|
|
<p><a name="index-word-splitting-90"></a>
|
|
The shell scans the results of parameter expansion, command substitution,
|
|
and arithmetic expansion that did not occur within double quotes for
|
|
word splitting.
|
|
|
|
<p>The shell treats each character of <samp><span class="env">$IFS</span></samp> as a delimiter, and splits
|
|
the results of the other expansions into words on these characters.
|
|
If <samp><span class="env">IFS</span></samp> is unset, or its value is exactly <code><space><tab><newline></code>,
|
|
the default, then sequences of
|
|
<code> <space></code>, <code><tab></code>, and <code><newline></code>
|
|
at the beginning and end of the results of the previous
|
|
expansions are ignored, and any sequence of <samp><span class="env">IFS</span></samp>
|
|
characters not at the beginning or end serves to delimit words.
|
|
If <samp><span class="env">IFS</span></samp> has a value other than the default, then sequences of
|
|
the whitespace characters <code>space</code> and <code>tab</code>
|
|
are ignored at the beginning and end of the
|
|
word, as long as the whitespace character is in the
|
|
value of <samp><span class="env">IFS</span></samp> (an <samp><span class="env">IFS</span></samp> whitespace character).
|
|
Any character in <samp><span class="env">IFS</span></samp> that is not <samp><span class="env">IFS</span></samp>
|
|
whitespace, along with any adjacent <samp><span class="env">IFS</span></samp>
|
|
whitespace characters, delimits a field. A sequence of <samp><span class="env">IFS</span></samp>
|
|
whitespace characters is also treated as a delimiter.
|
|
If the value of <samp><span class="env">IFS</span></samp> is null, no word splitting occurs.
|
|
|
|
<p>Explicit null arguments (<code>""</code> or <code>''</code>) 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.
|
|
|
|
<p>Note that if no expansion occurs, no splitting
|
|
is performed.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Filename-Expansion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Quote-Removal">Quote Removal</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Word-Splitting">Word Splitting</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.8 Filename Expansion</h4>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Pattern-Matching">Pattern Matching</a>: How the shell matches patterns.
|
|
</ul>
|
|
<a name="index-expansion_002c-filename-91"></a><a name="index-expansion_002c-pathname-92"></a><a name="index-filename-expansion-93"></a><a name="index-pathname-expansion-94"></a>
|
|
After word splitting, unless the <samp><span class="option">-f</span></samp> option has been set
|
|
(see <a href="#The-Set-Builtin">The Set Builtin</a>), Bash scans each word for the characters
|
|
`<samp><span class="samp">*</span></samp>', `<samp><span class="samp">?</span></samp>', and `<samp><span class="samp">[</span></samp>'.
|
|
If one of these characters appears, then the word is
|
|
regarded as a <var>pattern</var>,
|
|
and replaced with an alphabetically sorted list of
|
|
file names matching the pattern. If no matching file names are found,
|
|
and the shell option <code>nullglob</code> is disabled, the word is left
|
|
unchanged.
|
|
If the <code>nullglob</code> option is set, and no matches are found, the word
|
|
is removed.
|
|
If the <code>failglob</code> shell option is set, and no matches are found,
|
|
an error message is printed and the command is not executed.
|
|
If the shell option <code>nocaseglob</code> is enabled, the match is performed
|
|
without regard to the case of alphabetic characters.
|
|
|
|
<p>When a pattern is used for filename generation, the character `<samp><span class="samp">.</span></samp>'
|
|
at the start of a filename or immediately following a slash
|
|
must be matched explicitly, unless the shell option <code>dotglob</code> is set.
|
|
When matching a file name, the slash character must always be
|
|
matched explicitly.
|
|
In other cases, the `<samp><span class="samp">.</span></samp>' character is not treated specially.
|
|
|
|
<p>See the description of <code>shopt</code> in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>,
|
|
for a description of the <code>nocaseglob</code>, <code>nullglob</code>,
|
|
<code>failglob</code>, and <code>dotglob</code> options.
|
|
|
|
<p>The <samp><span class="env">GLOBIGNORE</span></samp>
|
|
shell variable may be used to restrict the set of filenames matching a
|
|
pattern. If <samp><span class="env">GLOBIGNORE</span></samp>
|
|
is set, each matching filename that also matches one of the patterns in
|
|
<samp><span class="env">GLOBIGNORE</span></samp> is removed from the list of matches. The filenames
|
|
<samp><span class="file">.</span></samp> and <samp><span class="file">..</span></samp>
|
|
are always ignored when <samp><span class="env">GLOBIGNORE</span></samp>
|
|
is set and not null.
|
|
However, setting <samp><span class="env">GLOBIGNORE</span></samp> to a non-null value has the effect of
|
|
enabling the <code>dotglob</code>
|
|
shell option, so all other filenames beginning with a
|
|
`<samp><span class="samp">.</span></samp>' will match.
|
|
To get the old behavior of ignoring filenames beginning with a
|
|
`<samp><span class="samp">.</span></samp>', make `<samp><span class="samp">.*</span></samp>' one of the patterns in <samp><span class="env">GLOBIGNORE</span></samp>.
|
|
The <code>dotglob</code> option is disabled when <samp><span class="env">GLOBIGNORE</span></samp>
|
|
is unset.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Pattern-Matching"></a>
|
|
Up: <a rel="up" accesskey="u" href="#Filename-Expansion">Filename Expansion</a>
|
|
|
|
</div>
|
|
|
|
<h5 class="subsubsection">3.5.8.1 Pattern Matching</h5>
|
|
|
|
<p><a name="index-pattern-matching-95"></a><a name="index-matching_002c-pattern-96"></a>
|
|
Any character that appears in a pattern, other than the special pattern
|
|
characters described below, matches itself.
|
|
The <span class="sc">nul</span> 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.
|
|
|
|
<p>The special pattern characters have the following meanings:
|
|
<dl>
|
|
<dt><code>*</code><dd>Matches any string, including the null string.
|
|
<br><dt><code>?</code><dd>Matches any single character.
|
|
<br><dt><code>[...]</code><dd>Matches any one of the enclosed characters. A pair of characters
|
|
separated by a hyphen denotes a <var>range expression</var>;
|
|
any character that sorts between those two characters, inclusive,
|
|
using the current locale's collating sequence and character set,
|
|
is matched. If the first character following the
|
|
`<samp><span class="samp">[</span></samp>' is a `<samp><span class="samp">!</span></samp>' or a `<samp><span class="samp">^</span></samp>'
|
|
then any character not enclosed is matched. A `<samp><span class="samp">−</span></samp>'
|
|
may be matched by including it as the first or last character
|
|
in the set. A `<samp><span class="samp">]</span></samp>' 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 value of the <samp><span class="env">LC_COLLATE</span></samp> shell variable,
|
|
if set.
|
|
|
|
<p>For example, in the default C locale, `<samp><span class="samp">[a-dx-z]</span></samp>' is equivalent to
|
|
`<samp><span class="samp">[abcdxyz]</span></samp>'. Many locales sort characters in dictionary order, and in
|
|
these locales `<samp><span class="samp">[a-dx-z]</span></samp>' is typically not equivalent to `<samp><span class="samp">[abcdxyz]</span></samp>';
|
|
it might be equivalent to `<samp><span class="samp">[aBbCcDdxXyYz]</span></samp>', for example. To obtain
|
|
the traditional interpretation of ranges in bracket expressions, you can
|
|
force the use of the C locale by setting the <samp><span class="env">LC_COLLATE</span></samp> or
|
|
<samp><span class="env">LC_ALL</span></samp> environment variable to the value `<samp><span class="samp">C</span></samp>'.
|
|
|
|
<p>Within `<samp><span class="samp">[</span></samp>' and `<samp><span class="samp">]</span></samp>', <var>character classes</var> can be specified
|
|
using the syntax
|
|
<code>[:</code><var>class</var><code>:]</code>, where <var>class</var> is one of the
|
|
following classes defined in the <span class="sc">posix</span> standard:
|
|
<pre class="example"> alnum alpha ascii blank cntrl digit graph lower
|
|
print punct space upper word xdigit
|
|
</pre>
|
|
<p class="noindent">A character class matches any character belonging to that class.
|
|
The <code>word</code> character class matches letters, digits, and the character
|
|
`<samp><span class="samp">_</span></samp>'.
|
|
|
|
<p>Within `<samp><span class="samp">[</span></samp>' and `<samp><span class="samp">]</span></samp>', an <var>equivalence class</var> can be
|
|
specified using the syntax <code>[=</code><var>c</var><code>=]</code>, which
|
|
matches all characters with the same collation weight (as defined
|
|
by the current locale) as the character <var>c</var>.
|
|
|
|
<p>Within `<samp><span class="samp">[</span></samp>' and `<samp><span class="samp">]</span></samp>', the syntax <code>[.</code><var>symbol</var><code>.]</code>
|
|
matches the collating symbol <var>symbol</var>.
|
|
</dl>
|
|
|
|
<p>If the <code>extglob</code> shell option is enabled using the <code>shopt</code>
|
|
builtin, several extended pattern matching operators are recognized.
|
|
In the following description, a <var>pattern-list</var> is a list of one
|
|
or more patterns separated by a `<samp><span class="samp">|</span></samp>'.
|
|
Composite patterns may be formed using one or more of the following
|
|
sub-patterns:
|
|
|
|
<dl>
|
|
<dt><code>?(</code><var>pattern-list</var><code>)</code><dd>Matches zero or one occurrence of the given patterns.
|
|
|
|
<br><dt><code>*(</code><var>pattern-list</var><code>)</code><dd>Matches zero or more occurrences of the given patterns.
|
|
|
|
<br><dt><code>+(</code><var>pattern-list</var><code>)</code><dd>Matches one or more occurrences of the given patterns.
|
|
|
|
<br><dt><code>@(</code><var>pattern-list</var><code>)</code><dd>Matches one of the given patterns.
|
|
|
|
<br><dt><code>!(</code><var>pattern-list</var><code>)</code><dd>Matches anything except one of the given patterns.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Quote-Removal"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Filename-Expansion">Filename Expansion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Expansions">Shell Expansions</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.5.9 Quote Removal</h4>
|
|
|
|
<p>After the preceding expansions, all unquoted occurrences of the
|
|
characters `<samp><span class="samp">\</span></samp>', `<samp><span class="samp">'</span></samp>', and `<samp><span class="samp">"</span></samp>' that did not
|
|
result from one of the above expansions are removed.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Redirections"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Executing-Commands">Executing Commands</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Expansions">Shell Expansions</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.6 Redirections</h3>
|
|
|
|
<p><a name="index-redirection-97"></a>
|
|
Before a command is executed, its input and output
|
|
may be <var>redirected</var>
|
|
using a special notation interpreted by the shell.
|
|
Redirection may also be used to open and close files for 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.
|
|
|
|
<p>In the following descriptions, if the file descriptor number is
|
|
omitted, and the first character of the redirection operator is
|
|
`<samp><span class="samp"><</span></samp>', the redirection refers to the standard input (file
|
|
descriptor 0). If the first character of the redirection operator
|
|
is `<samp><span class="samp">></span></samp>', the redirection refers to the standard output (file
|
|
descriptor 1).
|
|
|
|
<p>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.
|
|
|
|
<p>Note that the order of redirections is significant. For example,
|
|
the command
|
|
<pre class="example"> ls > <var>dirlist</var> 2>&1
|
|
</pre>
|
|
<p class="noindent">directs both standard output (file descriptor 1) and standard error
|
|
(file descriptor 2) to the file <var>dirlist</var>, while the command
|
|
<pre class="example"> ls 2>&1 > <var>dirlist</var>
|
|
</pre>
|
|
<p class="noindent">directs only the standard output to file <var>dirlist</var>,
|
|
because the standard error was duplicated as standard output
|
|
before the standard output was redirected to <var>dirlist</var>.
|
|
|
|
<p>Bash handles several filenames specially when they are used in
|
|
redirections, as described in the following table:
|
|
|
|
<dl>
|
|
<dt><code>/dev/fd/</code><var>fd</var><dd>If <var>fd</var> is a valid integer, file descriptor <var>fd</var> is duplicated.
|
|
|
|
<br><dt><code>/dev/stdin</code><dd>File descriptor 0 is duplicated.
|
|
|
|
<br><dt><code>/dev/stdout</code><dd>File descriptor 1 is duplicated.
|
|
|
|
<br><dt><code>/dev/stderr</code><dd>File descriptor 2 is duplicated.
|
|
|
|
<br><dt><code>/dev/tcp/</code><var>host</var><code>/</code><var>port</var><dd>If <var>host</var> is a valid hostname or Internet address, and <var>port</var>
|
|
is an integer port number or service name, Bash attempts to open a TCP
|
|
connection to the corresponding socket.
|
|
|
|
<br><dt><code>/dev/udp/</code><var>host</var><code>/</code><var>port</var><dd>If <var>host</var> is a valid hostname or Internet address, and <var>port</var>
|
|
is an integer port number or service name, Bash attempts to open a UDP
|
|
connection to the corresponding socket.
|
|
|
|
</dl>
|
|
|
|
<p>A failure to open or create a file causes the redirection to fail.
|
|
|
|
<p>Redirections using file descriptors greater than 9 should be used with
|
|
care, as they may conflict with file descriptors the shell uses
|
|
internally.
|
|
|
|
<h4 class="subsection">3.6.1 Redirecting Input</h4>
|
|
|
|
<p>Redirection of input causes the file whose name results from
|
|
the expansion of <var>word</var>
|
|
to be opened for reading on file descriptor <code>n</code>,
|
|
or the standard input (file descriptor 0) if <code>n</code>
|
|
is not specified.
|
|
|
|
<p>The general format for redirecting input is:
|
|
<pre class="example"> [<var>n</var>]<<var>word</var>
|
|
</pre>
|
|
<h4 class="subsection">3.6.2 Redirecting Output</h4>
|
|
|
|
<p>Redirection of output causes the file whose name results from
|
|
the expansion of <var>word</var>
|
|
to be opened for writing on file descriptor <var>n</var>,
|
|
or the standard output (file descriptor 1) if <var>n</var>
|
|
is not specified. If the file does not exist it is created;
|
|
if it does exist it is truncated to zero size.
|
|
|
|
<p>The general format for redirecting output is:
|
|
<pre class="example"> [<var>n</var>]>[|]<var>word</var>
|
|
</pre>
|
|
<p>If the redirection operator is `<samp><span class="samp">></span></samp>', and the <code>noclobber</code>
|
|
option to the <code>set</code> builtin has been enabled, the redirection
|
|
will fail if the file whose name results from the expansion of
|
|
<var>word</var> exists and is a regular file.
|
|
If the redirection operator is `<samp><span class="samp">>|</span></samp>', or the redirection operator is
|
|
`<samp><span class="samp">></span></samp>' and the <code>noclobber</code> option is not enabled, the redirection
|
|
is attempted even if the file named by <var>word</var> exists.
|
|
|
|
<h4 class="subsection">3.6.3 Appending Redirected Output</h4>
|
|
|
|
<p>Redirection of output in this fashion
|
|
causes the file whose name results from
|
|
the expansion of <var>word</var>
|
|
to be opened for appending on file descriptor <var>n</var>,
|
|
or the standard output (file descriptor 1) if <var>n</var>
|
|
is not specified. If the file does not exist it is created.
|
|
|
|
<p>The general format for appending output is:
|
|
<pre class="example"> [<var>n</var>]>><var>word</var>
|
|
</pre>
|
|
<h4 class="subsection">3.6.4 Redirecting Standard Output and Standard Error</h4>
|
|
|
|
<p>Bash 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 <var>word</var> with this construct.
|
|
|
|
<p>There are two formats for redirecting standard output and
|
|
standard error:
|
|
<pre class="example"> &><var>word</var>
|
|
</pre>
|
|
<p class="noindent">and
|
|
<pre class="example"> >&<var>word</var>
|
|
</pre>
|
|
<p class="noindent">Of the two forms, the first is preferred.
|
|
This is semantically equivalent to
|
|
<pre class="example"> ><var>word</var> 2>&1
|
|
</pre>
|
|
<h4 class="subsection">3.6.5 Here Documents</h4>
|
|
|
|
<p>This type of redirection instructs the shell to read input from the
|
|
current source until a line containing only <var>word</var>
|
|
(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.
|
|
|
|
<p>The format of here-documents is:
|
|
<pre class="example"> <<[−]<var>word</var>
|
|
<var>here-document</var>
|
|
<var>delimiter</var>
|
|
</pre>
|
|
<p>No parameter expansion, command substitution, arithmetic expansion,
|
|
or filename expansion is performed on
|
|
<var>word</var>. If any characters in <var>word</var> are quoted, the
|
|
<var>delimiter</var> is the result of quote removal on <var>word</var>,
|
|
and the lines in the here-document are not expanded.
|
|
If <var>word</var> is unquoted,
|
|
all lines of the here-document are subjected to parameter expansion,
|
|
command substitution, and arithmetic expansion. In the latter
|
|
case, the character sequence <code>\newline</code> is ignored, and `<samp><span class="samp">\</span></samp>'
|
|
must be used to quote the characters
|
|
`<samp><span class="samp">\</span></samp>', `<samp><span class="samp">$</span></samp>', and `<samp><span class="samp">`</span></samp>'.
|
|
|
|
<p>If the redirection operator is `<samp><span class="samp"><<-</span></samp>',
|
|
then all leading tab characters are stripped from input lines and the
|
|
line containing <var>delimiter</var>.
|
|
This allows here-documents within shell scripts to be indented in a
|
|
natural fashion.
|
|
|
|
<h4 class="subsection">3.6.6 Here Strings</h4>
|
|
|
|
<p>A variant of here documents, the format is:
|
|
<pre class="example"> <<< <var>word</var>
|
|
</pre>
|
|
<p>The <var>word</var> is expanded and supplied to the command on its standard
|
|
input.
|
|
|
|
<h4 class="subsection">3.6.7 Duplicating File Descriptors</h4>
|
|
|
|
<p>The redirection operator
|
|
<pre class="example"> [<var>n</var>]<&<var>word</var>
|
|
</pre>
|
|
<p class="noindent">is used to duplicate input file descriptors.
|
|
If <var>word</var>
|
|
expands to one or more digits, the file descriptor denoted by <var>n</var>
|
|
is made to be a copy of that file descriptor.
|
|
If the digits in <var>word</var> do not specify a file descriptor open for
|
|
input, a redirection error occurs.
|
|
If <var>word</var>
|
|
evaluates to `<samp><span class="samp">-</span></samp>', file descriptor <var>n</var> is closed. If
|
|
<var>n</var> is not specified, the standard input (file descriptor 0) is used.
|
|
|
|
<p>The operator
|
|
<pre class="example"> [<var>n</var>]>&<var>word</var>
|
|
</pre>
|
|
<p class="noindent">is used similarly to duplicate output file descriptors. If
|
|
<var>n</var> is not specified, the standard output (file descriptor 1) is used.
|
|
If the digits in <var>word</var> do not specify a file descriptor open for
|
|
output, a redirection error occurs.
|
|
As a special case, if <var>n</var> is omitted, and <var>word</var> does not
|
|
expand to one or more digits, the standard output and standard
|
|
error are redirected as described previously.
|
|
|
|
<h4 class="subsection">3.6.8 Moving File Descriptors</h4>
|
|
|
|
<p>The redirection operator
|
|
<pre class="example"> [<var>n</var>]<&<var>digit</var>-
|
|
</pre>
|
|
<p class="noindent">moves the file descriptor <var>digit</var> to file descriptor <var>n</var>,
|
|
or the standard input (file descriptor 0) if <var>n</var> is not specified.
|
|
<var>digit</var> is closed after being duplicated to <var>n</var>.
|
|
|
|
<p>Similarly, the redirection operator
|
|
<pre class="example"> [<var>n</var>]>&<var>digit</var>-
|
|
</pre>
|
|
<p class="noindent">moves the file descriptor <var>digit</var> to file descriptor <var>n</var>,
|
|
or the standard output (file descriptor 1) if <var>n</var> is not specified.
|
|
|
|
<h4 class="subsection">3.6.9 Opening File Descriptors for Reading and Writing</h4>
|
|
|
|
<p>The redirection operator
|
|
<pre class="example"> [<var>n</var>]<><var>word</var>
|
|
</pre>
|
|
<p class="noindent">causes the file whose name is the expansion of <var>word</var>
|
|
to be opened for both reading and writing on file descriptor
|
|
<var>n</var>, or on file descriptor 0 if <var>n</var>
|
|
is not specified. If the file does not exist, it is created.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Executing-Commands"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Scripts">Shell Scripts</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Redirections">Redirections</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.7 Executing Commands</h3>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Simple-Command-Expansion">Simple Command Expansion</a>: How Bash expands simple commands before
|
|
executing them.
|
|
<li><a accesskey="2" href="#Command-Search-and-Execution">Command Search and Execution</a>: How Bash finds commands and runs them.
|
|
<li><a accesskey="3" href="#Command-Execution-Environment">Command Execution Environment</a>: The environment in which Bash
|
|
executes commands that are not
|
|
shell builtins.
|
|
<li><a accesskey="4" href="#Environment">Environment</a>: The environment given to a command.
|
|
<li><a accesskey="5" href="#Exit-Status">Exit Status</a>: The status returned by commands and how Bash
|
|
interprets it.
|
|
<li><a accesskey="6" href="#Signals">Signals</a>: What happens when Bash or a command it runs
|
|
receives a signal.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Simple-Command-Expansion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Command-Search-and-Execution">Command Search and Execution</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Executing-Commands">Executing Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.7.1 Simple Command Expansion</h4>
|
|
|
|
<p><a name="index-command-expansion-98"></a>
|
|
When a simple command is executed, the shell performs the following
|
|
expansions, assignments, and redirections, from left to right.
|
|
|
|
<ol type=1 start=1>
|
|
<li>The words that the parser has marked as variable assignments (those
|
|
preceding the command name) and redirections are saved for later
|
|
processing.
|
|
|
|
<li>The words that are not variable assignments or redirections are
|
|
expanded (see <a href="#Shell-Expansions">Shell Expansions</a>).
|
|
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.
|
|
|
|
<li>Redirections are performed as described above (see <a href="#Redirections">Redirections</a>).
|
|
|
|
<li>The text after the `<samp><span class="samp">=</span></samp>' in each variable assignment undergoes tilde
|
|
expansion, parameter expansion, command substitution, arithmetic expansion,
|
|
and quote removal before being assigned to the variable.
|
|
</ol>
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Command-Search-and-Execution"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Command-Execution-Environment">Command Execution Environment</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Simple-Command-Expansion">Simple Command Expansion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Executing-Commands">Executing Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.7.2 Command Search and Execution</h4>
|
|
|
|
<p><a name="index-command-execution-99"></a><a name="index-command-search-100"></a>
|
|
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.
|
|
|
|
<ol type=1 start=1>
|
|
<li>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 <a href="#Shell-Functions">Shell Functions</a>.
|
|
|
|
<li>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.
|
|
|
|
<li>If the name is neither a shell function nor a builtin,
|
|
and contains no slashes, Bash searches each element of
|
|
<samp><span class="env">$PATH</span></samp> 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 <samp><span class="env">PATH</span></samp> searches
|
|
(see the description of <code>hash</code> in <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
A full search of the directories in <samp><span class="env">$PATH</span></samp>
|
|
is performed only if the command is not found in the hash table.
|
|
If the search is unsuccessful, the shell prints an error
|
|
message and returns an exit status of 127.
|
|
|
|
<li>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.
|
|
|
|
<li>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
|
|
<var>shell script</var> and the shell executes it as described in
|
|
<a href="#Shell-Scripts">Shell Scripts</a>.
|
|
|
|
<li>If the command was not begun asynchronously, the shell waits for
|
|
the command to complete and collects its exit status.
|
|
|
|
</ol>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Command-Execution-Environment"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Environment">Environment</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Command-Search-and-Execution">Command Search and Execution</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Executing-Commands">Executing Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.7.3 Command Execution Environment</h4>
|
|
|
|
<p><a name="index-execution-environment-101"></a>
|
|
The shell has an <var>execution environment</var>, which consists of the
|
|
following:
|
|
|
|
<ul>
|
|
<li>open files inherited by the shell at invocation, as modified by
|
|
redirections supplied to the <code>exec</code> builtin
|
|
|
|
<li>the current working directory as set by <code>cd</code>, <code>pushd</code>, or
|
|
<code>popd</code>, or inherited by the shell at invocation
|
|
|
|
<li>the file creation mode mask as set by <code>umask</code> or inherited from
|
|
the shell's parent
|
|
|
|
<li>current traps set by <code>trap</code>
|
|
|
|
<li>shell parameters that are set by variable assignment or with <code>set</code>
|
|
or inherited from the shell's parent in the environment
|
|
|
|
<li>shell functions defined during execution or inherited from the shell's
|
|
parent in the environment
|
|
|
|
<li>options enabled at invocation (either by default or with command-line
|
|
arguments) or by <code>set</code>
|
|
|
|
<li>options enabled by <code>shopt</code> (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>)
|
|
|
|
<li>shell aliases defined with <code>alias</code> (see <a href="#Aliases">Aliases</a>)
|
|
|
|
<li>various process <span class="sc">id</span>s, including those of background jobs
|
|
(see <a href="#Lists">Lists</a>), the value of <code>$$</code>, and the value of
|
|
<samp><span class="env">$PPID</span></samp>
|
|
|
|
</ul>
|
|
|
|
<p>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.
|
|
|
|
<ul>
|
|
<li>the shell's open files, plus any modifications and additions specified
|
|
by redirections to the command
|
|
|
|
<li>the current working directory
|
|
|
|
<li>the file creation mode mask
|
|
|
|
<li>shell variables and functions marked for export, along with variables
|
|
exported for the command, passed in the environment (see <a href="#Environment">Environment</a>)
|
|
|
|
<li>traps caught by the shell are reset to the values inherited from the
|
|
shell's parent, and traps ignored by the shell are ignored
|
|
|
|
</ul>
|
|
|
|
<p>A command invoked in this separate environment cannot affect the
|
|
shell's execution environment.
|
|
|
|
<p>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.
|
|
|
|
<p>If a command is followed by a `<samp><span class="samp">&</span></samp>' and job control is not active, the
|
|
default standard input for the command is the empty file <samp><span class="file">/dev/null</span></samp>.
|
|
Otherwise, the invoked command inherits the file descriptors of the calling
|
|
shell as modified by redirections.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Environment"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Exit-Status">Exit Status</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Command-Execution-Environment">Command Execution Environment</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Executing-Commands">Executing Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.7.4 Environment</h4>
|
|
|
|
<p><a name="index-environment-102"></a>
|
|
When a program is invoked it is given an array of strings
|
|
called the <var>environment</var>.
|
|
This is a list of name-value pairs, of the form <code>name=value</code>.
|
|
|
|
<p>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 <var>export</var>
|
|
to child processes. Executed commands inherit the environment.
|
|
The <code>export</code> and `<samp><span class="samp">declare -x</span></samp>'
|
|
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 <code>unset</code> and `<samp><span class="samp">export -n</span></samp>'
|
|
commands, plus any additions via the <code>export</code> and
|
|
`<samp><span class="samp">declare -x</span></samp>' commands.
|
|
|
|
<p>The environment for any simple command
|
|
or function may be augmented temporarily by prefixing it with
|
|
parameter assignments, as described in <a href="#Shell-Parameters">Shell Parameters</a>.
|
|
These assignment statements affect only the environment seen
|
|
by that command.
|
|
|
|
<p>If the <samp><span class="option">-k</span></samp> option is set (see <a href="#The-Set-Builtin">The Set Builtin</a>), then all
|
|
parameter assignments are placed in the environment for a command,
|
|
not just those that precede the command name.
|
|
|
|
<p>When Bash invokes an external command, the variable `<samp><span class="samp">$_</span></samp>'
|
|
is set to the full path name of the command and passed to that
|
|
command in its environment.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Exit-Status"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Signals">Signals</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Environment">Environment</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Executing-Commands">Executing Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.7.5 Exit Status</h4>
|
|
|
|
<p><a name="index-exit-status-103"></a>
|
|
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 <var>N</var>,
|
|
Bash uses the value 128+<var>N</var> as the exit status.
|
|
|
|
<p>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.
|
|
|
|
<p>If a command fails because of an error during expansion or redirection,
|
|
the exit status is greater than zero.
|
|
|
|
<p>The exit status is used by the Bash conditional commands
|
|
(see <a href="#Conditional-Constructs">Conditional Constructs</a>) and some of the list
|
|
constructs (see <a href="#Lists">Lists</a>).
|
|
|
|
<p>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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Signals"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Exit-Status">Exit Status</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Executing-Commands">Executing Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">3.7.6 Signals</h4>
|
|
|
|
<p><a name="index-signal-handling-104"></a>
|
|
When Bash is interactive, in the absence of any traps, it ignores
|
|
<code>SIGTERM</code> (so that `<samp><span class="samp">kill 0</span></samp>' does not kill an interactive shell),
|
|
and <code>SIGINT</code>
|
|
is caught and handled (so that the <code>wait</code> builtin is interruptible).
|
|
When Bash receives a <code>SIGINT</code>, it breaks out of any executing loops.
|
|
In all cases, Bash ignores <code>SIGQUIT</code>.
|
|
If job control is in effect (see <a href="#Job-Control">Job Control</a>), Bash
|
|
ignores <code>SIGTTIN</code>, <code>SIGTTOU</code>, and <code>SIGTSTP</code>.
|
|
|
|
<p>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 <code>SIGINT</code> and <code>SIGQUIT</code> in addition to these inherited
|
|
handlers.
|
|
Commands run as a result of
|
|
command substitution ignore the keyboard-generated job control signals
|
|
<code>SIGTTIN</code>, <code>SIGTTOU</code>, and <code>SIGTSTP</code>.
|
|
|
|
<p>The shell exits by default upon receipt of a <code>SIGHUP</code>.
|
|
Before exiting, an interactive shell resends the <code>SIGHUP</code> to
|
|
all jobs, running or stopped.
|
|
Stopped jobs are sent <code>SIGCONT</code> to ensure that they receive
|
|
the <code>SIGHUP</code>.
|
|
To prevent the shell from sending the <code>SIGHUP</code> signal to a
|
|
particular job, it should be removed
|
|
from the jobs table with the <code>disown</code>
|
|
builtin (see <a href="#Job-Control-Builtins">Job Control Builtins</a>) or marked
|
|
to not receive <code>SIGHUP</code> using <code>disown -h</code>.
|
|
|
|
<p>If the <code>huponexit</code> shell option has been set with <code>shopt</code>
|
|
(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), Bash sends a <code>SIGHUP</code> to all jobs when
|
|
an interactive login shell exits.
|
|
|
|
<p>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 <code>wait</code> builtin, the reception of a signal for
|
|
which a trap has been set will cause the <code>wait</code> builtin to return
|
|
immediately with an exit status greater than 128, immediately after
|
|
which the trap is executed.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Scripts"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Executing-Commands">Executing Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Basic-Shell-Features">Basic Shell Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">3.8 Shell Scripts</h3>
|
|
|
|
<p><a name="index-shell-script-105"></a>
|
|
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 <samp><span class="option">-c</span></samp> nor <samp><span class="option">-s</span></samp> option is supplied
|
|
(see <a href="#Invoking-Bash">Invoking Bash</a>),
|
|
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 <samp><span class="env">$PATH</span></samp> if not found there.
|
|
|
|
<p>When Bash runs
|
|
a shell script, it sets the special parameter <code>0</code> 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.
|
|
|
|
<p>A shell script may be made executable by using the <code>chmod</code> command
|
|
to turn on the execute bit. When Bash finds such a file while
|
|
searching the <samp><span class="env">$PATH</span></samp> for a command, it spawns a subshell to
|
|
execute it. In other words, executing
|
|
<pre class="example"> filename <var>arguments</var>
|
|
</pre>
|
|
<p class="noindent">is equivalent to executing
|
|
<pre class="example"> bash filename <var>arguments</var>
|
|
</pre>
|
|
<p class="noindent">if <code>filename</code> 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 <code>hash</code> in <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
are retained by the child.
|
|
|
|
<p>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 `<samp><span class="samp">#!</span></samp>', the remainder of the line specifies
|
|
an interpreter for the program.
|
|
Thus, you can specify Bash, <code>awk</code>, Perl, or some other
|
|
interpreter and write the rest of the script file in that language.
|
|
|
|
<p>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.
|
|
|
|
<p>Bash scripts often begin with <code>#! /bin/bash</code> (assuming that
|
|
Bash has been installed in <samp><span class="file">/bin</span></samp>), since this ensures that
|
|
Bash will be used to interpret the script, even if it is executed
|
|
under another shell.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Builtin-Commands"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Variables">Shell Variables</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Basic-Shell-Features">Basic Shell Features</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">4 Shell Builtin Commands</h2>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>: Builtin commands inherited from the Bourne
|
|
Shell.
|
|
<li><a accesskey="2" href="#Bash-Builtins">Bash Builtins</a>: Table of builtins specific to Bash.
|
|
<li><a accesskey="3" href="#Modifying-Shell-Behavior">Modifying Shell Behavior</a>: Builtins to modify shell attributes and
|
|
optional behavior.
|
|
<li><a accesskey="4" href="#Special-Builtins">Special Builtins</a>: Builtin commands classified specially by
|
|
POSIX.
|
|
</ul>
|
|
|
|
<p>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 (see <a href="#Simple-Commands">Simple Commands</a>), 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.
|
|
|
|
<p>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.
|
|
|
|
<p>Several builtin commands are described in other chapters: builtin
|
|
commands which provide the Bash interface to the job control
|
|
facilities (see <a href="#Job-Control-Builtins">Job Control Builtins</a>), the directory stack
|
|
(see <a href="#Directory-Stack-Builtins">Directory Stack Builtins</a>), the command history
|
|
(see <a href="#Bash-History-Builtins">Bash History Builtins</a>), and the programmable completion
|
|
facilities (see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>).
|
|
|
|
<p>Many of the builtins have been extended by <span class="sc">posix</span> or Bash.
|
|
|
|
<p>Unless otherwise noted, each builtin command documented as accepting
|
|
options preceded by `<samp><span class="samp">-</span></samp>' accepts `<samp><span class="samp">--</span></samp>'
|
|
to signify the end of the options.
|
|
For example, the <code>:</code>, <code>true</code>, <code>false</code>, and <code>test</code>
|
|
builtins do not accept options.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bourne-Shell-Builtins"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bash-Builtins">Bash Builtins</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">4.1 Bourne Shell Builtins</h3>
|
|
|
|
<p>The following shell builtin commands are inherited from the Bourne Shell.
|
|
These commands are implemented as specified by the <span class="sc">posix</span> standard.
|
|
|
|
<dl>
|
|
<dt><code>: </code><span class="roman">(a colon)</span><dd><a name="index-g_t_003a-106"></a>
|
|
<pre class="example"> : [<var>arguments</var>]
|
|
</pre>
|
|
<p>Do nothing beyond expanding <var>arguments</var> and performing redirections.
|
|
The return status is zero.
|
|
|
|
<br><dt><code>. </code><span class="roman">(a period)</span><dd><a name="index-g_t_002e-107"></a>
|
|
<pre class="example"> . <var>filename</var> [<var>arguments</var>]
|
|
</pre>
|
|
<p>Read and execute commands from the <var>filename</var> argument in the
|
|
current shell context. If <var>filename</var> does not contain a slash,
|
|
the <samp><span class="env">PATH</span></samp> variable is used to find <var>filename</var>.
|
|
When Bash is not in <span class="sc">posix</span> mode, the current directory is searched
|
|
if <var>filename</var> is not found in <samp><span class="env">$PATH</span></samp>.
|
|
If any <var>arguments</var> are supplied, they become the positional
|
|
parameters when <var>filename</var> 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 <var>filename</var> is not found, or
|
|
cannot be read, the return status is non-zero.
|
|
This builtin is equivalent to <code>source</code>.
|
|
|
|
<br><dt><code>break</code><dd><a name="index-break-108"></a>
|
|
<pre class="example"> break [<var>n</var>]
|
|
</pre>
|
|
<p>Exit from a <code>for</code>, <code>while</code>, <code>until</code>, or <code>select</code> loop.
|
|
If <var>n</var> is supplied, the <var>n</var>th enclosing loop is exited.
|
|
<var>n</var> must be greater than or equal to 1.
|
|
The return status is zero unless <var>n</var> is not greater than or equal to 1.
|
|
|
|
<br><dt><code>cd</code><dd><a name="index-cd-109"></a>
|
|
<pre class="example"> cd [-L|-P] [<var>directory</var>]
|
|
</pre>
|
|
<p>Change the current working directory to <var>directory</var>.
|
|
If <var>directory</var> is not given, the value of the <samp><span class="env">HOME</span></samp> shell
|
|
variable is used.
|
|
If the shell variable <samp><span class="env">CDPATH</span></samp> exists, it is used as a search path.
|
|
If <var>directory</var> begins with a slash, <samp><span class="env">CDPATH</span></samp> is not used.
|
|
|
|
<p>The <samp><span class="option">-P</span></samp> option means to not follow symbolic links; symbolic
|
|
links are followed by default or with the <samp><span class="option">-L</span></samp> option.
|
|
If <var>directory</var> is `<samp><span class="samp">-</span></samp>', it is equivalent to <samp><span class="env">$OLDPWD</span></samp>.
|
|
|
|
<p>If a non-empty directory name from <samp><span class="env">CDPATH</span></samp> is used, or if
|
|
`<samp><span class="samp">-</span></samp>' is the first argument, and the directory change is
|
|
successful, the absolute pathname of the new working directory is
|
|
written to the standard output.
|
|
|
|
<p>The return status is zero if the directory is successfully changed,
|
|
non-zero otherwise.
|
|
|
|
<br><dt><code>continue</code><dd><a name="index-continue-110"></a>
|
|
<pre class="example"> continue [<var>n</var>]
|
|
</pre>
|
|
<p>Resume the next iteration of an enclosing <code>for</code>, <code>while</code>,
|
|
<code>until</code>, or <code>select</code> loop.
|
|
If <var>n</var> is supplied, the execution of the <var>n</var>th enclosing loop
|
|
is resumed.
|
|
<var>n</var> must be greater than or equal to 1.
|
|
The return status is zero unless <var>n</var> is not greater than or equal to 1.
|
|
|
|
<br><dt><code>eval</code><dd><a name="index-eval-111"></a>
|
|
<pre class="example"> eval [<var>arguments</var>]
|
|
</pre>
|
|
<p>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 <code>eval</code>.
|
|
If there are no arguments or only empty arguments, the return status is
|
|
zero.
|
|
|
|
<br><dt><code>exec</code><dd><a name="index-exec-112"></a>
|
|
<pre class="example"> exec [-cl] [-a <var>name</var>] [<var>command</var> [<var>arguments</var>]]
|
|
</pre>
|
|
<p>If <var>command</var>
|
|
is supplied, it replaces the shell without creating a new process.
|
|
If the <samp><span class="option">-l</span></samp> option is supplied, the shell places a dash at the
|
|
beginning of the zeroth argument passed to <var>command</var>.
|
|
This is what the <code>login</code> program does.
|
|
The <samp><span class="option">-c</span></samp> option causes <var>command</var> to be executed with an empty
|
|
environment.
|
|
If <samp><span class="option">-a</span></samp> is supplied, the shell passes <var>name</var> as the zeroth
|
|
argument to <var>command</var>.
|
|
If no <var>command</var> 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.
|
|
|
|
<br><dt><code>exit</code><dd><a name="index-exit-113"></a>
|
|
<pre class="example"> exit [<var>n</var>]
|
|
</pre>
|
|
<p>Exit the shell, returning a status of <var>n</var> to the shell's parent.
|
|
If <var>n</var> is omitted, the exit status is that of the last command executed.
|
|
Any trap on <code>EXIT</code> is executed before the shell terminates.
|
|
|
|
<br><dt><code>export</code><dd><a name="index-export-114"></a>
|
|
<pre class="example"> export [-fn] [-p] [<var>name</var>[=<var>value</var>]]
|
|
</pre>
|
|
<p>Mark each <var>name</var> to be passed to child processes
|
|
in the environment. If the <samp><span class="option">-f</span></samp> option is supplied, the <var>name</var>s
|
|
refer to shell functions; otherwise the names refer to shell variables.
|
|
The <samp><span class="option">-n</span></samp> option means to no longer mark each <var>name</var> for export.
|
|
If no <var>names</var> are supplied, or if the <samp><span class="option">-p</span></samp> option is given, a
|
|
list of exported names is displayed.
|
|
The <samp><span class="option">-p</span></samp> option displays output in a form that may be reused as input.
|
|
If a variable name is followed by =<var>value</var>, the value of
|
|
the variable is set to <var>value</var>.
|
|
|
|
<p>The return status is zero unless an invalid option is supplied, one of
|
|
the names is not a valid shell variable name, or <samp><span class="option">-f</span></samp> is supplied
|
|
with a name that is not a shell function.
|
|
|
|
<br><dt><code>getopts</code><dd><a name="index-getopts-115"></a>
|
|
<pre class="example"> getopts <var>optstring</var> <var>name</var> [<var>args</var>]
|
|
</pre>
|
|
<p><code>getopts</code> is used by shell scripts to parse positional parameters.
|
|
<var>optstring</var> 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 white space.
|
|
The colon (`<samp><span class="samp">:</span></samp>') and question mark (`<samp><span class="samp">?</span></samp>') may not be
|
|
used as option characters.
|
|
Each time it is invoked, <code>getopts</code>
|
|
places the next option in the shell variable <var>name</var>, initializing
|
|
<var>name</var> if it does not exist,
|
|
and the index of the next argument to be processed into the
|
|
variable <samp><span class="env">OPTIND</span></samp>.
|
|
<samp><span class="env">OPTIND</span></samp> is initialized to 1 each time the shell or a shell script
|
|
is invoked.
|
|
When an option requires an argument,
|
|
<code>getopts</code> places that argument into the variable <samp><span class="env">OPTARG</span></samp>.
|
|
The shell does not reset <samp><span class="env">OPTIND</span></samp> automatically; it must be manually
|
|
reset between multiple calls to <code>getopts</code> within the same shell
|
|
invocation if a new set of parameters is to be used.
|
|
|
|
<p>When the end of options is encountered, <code>getopts</code> exits with a
|
|
return value greater than zero.
|
|
<samp><span class="env">OPTIND</span></samp> is set to the index of the first non-option argument,
|
|
and <code>name</code> is set to `<samp><span class="samp">?</span></samp>'.
|
|
|
|
<p><code>getopts</code>
|
|
normally parses the positional parameters, but if more arguments are
|
|
given in <var>args</var>, <code>getopts</code> parses those instead.
|
|
|
|
<p><code>getopts</code> can report errors in two ways. If the first character of
|
|
<var>optstring</var> is a colon, <var>silent</var>
|
|
error reporting is used. In normal operation diagnostic messages
|
|
are printed when invalid options or missing option arguments are
|
|
encountered.
|
|
If the variable <samp><span class="env">OPTERR</span></samp>
|
|
is set to 0, no error messages will be displayed, even if the first
|
|
character of <code>optstring</code> is not a colon.
|
|
|
|
<p>If an invalid option is seen,
|
|
<code>getopts</code> places `<samp><span class="samp">?</span></samp>' into <var>name</var> and, if not silent,
|
|
prints an error message and unsets <samp><span class="env">OPTARG</span></samp>.
|
|
If <code>getopts</code> is silent, the option character found is placed in
|
|
<samp><span class="env">OPTARG</span></samp> and no diagnostic message is printed.
|
|
|
|
<p>If a required argument is not found, and <code>getopts</code>
|
|
is not silent, a question mark (`<samp><span class="samp">?</span></samp>') is placed in <var>name</var>,
|
|
<code>OPTARG</code> is unset, and a diagnostic message is printed.
|
|
If <code>getopts</code> is silent, then a colon (`<samp><span class="samp">:</span></samp>') is placed in
|
|
<var>name</var> and <samp><span class="env">OPTARG</span></samp> is set to the option character found.
|
|
|
|
<br><dt><code>hash</code><dd><a name="index-hash-116"></a>
|
|
<pre class="example"> hash [-r] [-p <var>filename</var>] [-dt] [<var>name</var>]
|
|
</pre>
|
|
<p>Remember the full pathnames of commands specified as <var>name</var> arguments,
|
|
so they need not be searched for on subsequent invocations.
|
|
The commands are found by searching through the directories listed in
|
|
<samp><span class="env">$PATH</span></samp>.
|
|
The <samp><span class="option">-p</span></samp> option inhibits the path search, and <var>filename</var> is
|
|
used as the location of <var>name</var>.
|
|
The <samp><span class="option">-r</span></samp> option causes the shell to forget all remembered locations.
|
|
The <samp><span class="option">-d</span></samp> option causes the shell to forget the remembered location
|
|
of each <var>name</var>.
|
|
If the <samp><span class="option">-t</span></samp> option is supplied, the full pathname to which each
|
|
<var>name</var> corresponds is printed. If multiple <var>name</var> arguments are
|
|
supplied with <samp><span class="option">-t</span></samp> the <var>name</var> is printed before the hashed
|
|
full pathname.
|
|
The <samp><span class="option">-l</span></samp> option causes output to be displayed in a format
|
|
that may be reused as input.
|
|
If no arguments are given, or if only <samp><span class="option">-l</span></samp> is supplied,
|
|
information about remembered commands is printed.
|
|
The return status is zero unless a <var>name</var> is not found or an invalid
|
|
option is supplied.
|
|
|
|
<br><dt><code>pwd</code><dd><a name="index-pwd-117"></a>
|
|
<pre class="example"> pwd [-LP]
|
|
</pre>
|
|
<p>Print the absolute pathname of the current working directory.
|
|
If the <samp><span class="option">-P</span></samp> option is supplied, the pathname printed will not
|
|
contain symbolic links.
|
|
If the <samp><span class="option">-L</span></samp> 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.
|
|
|
|
<br><dt><code>readonly</code><dd><a name="index-readonly-118"></a>
|
|
<pre class="example"> readonly [-apf] [<var>name</var>[=<var>value</var>]] ...
|
|
</pre>
|
|
<p>Mark each <var>name</var> as readonly.
|
|
The values of these names may not be changed by subsequent assignment.
|
|
If the <samp><span class="option">-f</span></samp> option is supplied, each <var>name</var> refers to a shell
|
|
function.
|
|
The <samp><span class="option">-a</span></samp> option means each <var>name</var> refers to an array variable.
|
|
If no <var>name</var> arguments are given, or if the <samp><span class="option">-p</span></samp>
|
|
option is supplied, a list of all readonly names is printed.
|
|
The <samp><span class="option">-p</span></samp> option causes output to be displayed in a format that
|
|
may be reused as input.
|
|
If a variable name is followed by =<var>value</var>, the value of
|
|
the variable is set to <var>value</var>.
|
|
The return status is zero unless an invalid option is supplied, one of
|
|
the <var>name</var> arguments is not a valid shell variable or function name,
|
|
or the <samp><span class="option">-f</span></samp> option is supplied with a name that is not a shell function.
|
|
|
|
<br><dt><code>return</code><dd><a name="index-return-119"></a>
|
|
<pre class="example"> return [<var>n</var>]
|
|
</pre>
|
|
<p>Cause a shell function to exit with the return value <var>n</var>.
|
|
If <var>n</var> is not supplied, the return value is the exit status of the
|
|
last command executed in the function.
|
|
This may also be used to terminate execution of a script being executed
|
|
with the <code>.</code> (or <code>source</code>) builtin, returning either <var>n</var> or
|
|
the exit status of the last command executed within the script as the exit
|
|
status of the script.
|
|
Any command associated with the <code>RETURN</code> trap is executed
|
|
before execution resumes after the function or script.
|
|
The return status is non-zero if <code>return</code> is used outside a function
|
|
and not during the execution of a script by <code>.</code> or <code>source</code>.
|
|
|
|
<br><dt><code>shift</code><dd><a name="index-shift-120"></a>
|
|
<pre class="example"> shift [<var>n</var>]
|
|
</pre>
|
|
<p>Shift the positional parameters to the left by <var>n</var>.
|
|
The positional parameters from <var>n</var>+1 <small class="dots">...</small> <code>$#</code> are
|
|
renamed to <code>$1</code> <small class="dots">...</small> <code>$#</code>-<var>n</var>.
|
|
Parameters represented by the numbers <code>$#</code> to <code>$#</code>-<var>n</var>+1
|
|
are unset.
|
|
<var>n</var> must be a non-negative number less than or equal to <code>$#</code>.
|
|
If <var>n</var> is zero or greater than <code>$#</code>, the positional parameters
|
|
are not changed.
|
|
If <var>n</var> is not supplied, it is assumed to be 1.
|
|
The return status is zero unless <var>n</var> is greater than <code>$#</code> or
|
|
less than zero, non-zero otherwise.
|
|
|
|
<br><dt><code>test</code><dt><code>[</code><dd><a name="index-test-121"></a><a name="index-g_t_005b-122"></a>Evaluate a conditional expression <var>expr</var>.
|
|
Each operator and operand must be a separate argument.
|
|
Expressions are composed of the primaries described below in
|
|
<a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>.
|
|
<code>test</code> does not accept any options, nor does it accept and ignore
|
|
an argument of <samp><span class="option">--</span></samp> as signifying the end of options.
|
|
|
|
<p>When the <code>[</code> form is used, the last argument to the command must
|
|
be a <code>]</code>.
|
|
|
|
<p>Expressions may be combined using the following operators, listed in
|
|
decreasing order of precedence.
|
|
|
|
<dl>
|
|
<dt><code>! </code><var>expr</var><dd>True if <var>expr</var> is false.
|
|
|
|
<br><dt><code>( </code><var>expr</var><code> )</code><dd>Returns the value of <var>expr</var>.
|
|
This may be used to override the normal precedence of operators.
|
|
|
|
<br><dt><var>expr1</var><code> -a </code><var>expr2</var><dd>True if both <var>expr1</var> and <var>expr2</var> are true.
|
|
|
|
<br><dt><var>expr1</var><code> -o </code><var>expr2</var><dd>True if either <var>expr1</var> or <var>expr2</var> is true.
|
|
</dl>
|
|
|
|
<p>The <code>test</code> and <code>[</code> builtins evaluate conditional
|
|
expressions using a set of rules based on the number of arguments.
|
|
|
|
<dl>
|
|
<dt>0 arguments<dd>The expression is false.
|
|
|
|
<br><dt>1 argument<dd>The expression is true if and only if the argument is not null.
|
|
|
|
<br><dt>2 arguments<dd>If the first argument is `<samp><span class="samp">!</span></samp>', the expression is true if and
|
|
only if the second argument is null.
|
|
If the first argument is one of the unary conditional operators
|
|
(see <a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the expression
|
|
is true if the unary test is true.
|
|
If the first argument is not a valid unary operator, the expression is
|
|
false.
|
|
|
|
<br><dt>3 arguments<dd>If the second argument is one of the binary conditional
|
|
operators (see <a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>), the
|
|
result of the expression is the result of the binary test using the
|
|
first and third arguments as operands.
|
|
If the first argument is `<samp><span class="samp">!</span></samp>', the value is the negation of
|
|
the two-argument test using the second and third arguments.
|
|
If the first argument is exactly `<samp><span class="samp">(</span></samp>' and the third argument is
|
|
exactly `<samp><span class="samp">)</span></samp>', the result is the one-argument test of the second
|
|
argument.
|
|
Otherwise, the expression is false.
|
|
The `<samp><span class="samp">-a</span></samp>' and `<samp><span class="samp">-o</span></samp>' operators are considered binary operators
|
|
in this case.
|
|
|
|
<br><dt>4 arguments<dd>If the first argument is `<samp><span class="samp">!</span></samp>', 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.
|
|
|
|
<br><dt>5 or more arguments<dd>The expression is parsed and evaluated according to precedence
|
|
using the rules listed above.
|
|
</dl>
|
|
|
|
<br><dt><code>times</code><dd><a name="index-times-123"></a>
|
|
<pre class="example"> times
|
|
</pre>
|
|
<p>Print out the user and system times used by the shell and its children.
|
|
The return status is zero.
|
|
|
|
<br><dt><code>trap</code><dd><a name="index-trap-124"></a>
|
|
<pre class="example"> trap [-lp] [<var>arg</var>] [<var>sigspec</var> ...]
|
|
</pre>
|
|
<p>The commands in <var>arg</var> are to be read and executed when the
|
|
shell receives signal <var>sigspec</var>. If <var>arg</var> is absent (and
|
|
there is a single <var>sigspec</var>) or
|
|
equal to `<samp><span class="samp">-</span></samp>', each specified signal's disposition is reset
|
|
to the value it had when the shell was started.
|
|
If <var>arg</var> is the null string, then the signal specified by
|
|
each <var>sigspec</var> is ignored by the shell and commands it invokes.
|
|
If <var>arg</var> is not present and <samp><span class="option">-p</span></samp> has been supplied,
|
|
the shell displays the trap commands associated with each <var>sigspec</var>.
|
|
If no arguments are supplied, or
|
|
only <samp><span class="option">-p</span></samp> is given, <code>trap</code> prints the list of commands
|
|
associated with each signal number in a form that may be reused as
|
|
shell input.
|
|
The <samp><span class="option">-l</span></samp> option causes the shell to print a list of signal names
|
|
and their corresponding numbers.
|
|
Each <var>sigspec</var> is either a signal name or a signal number.
|
|
Signal names are case insensitive and the <code>SIG</code> prefix is optional.
|
|
If a <var>sigspec</var>
|
|
is <code>0</code> or <code>EXIT</code>, <var>arg</var> is executed when the shell exits.
|
|
If a <var>sigspec</var> is <code>DEBUG</code>, the command <var>arg</var> is executed
|
|
before every simple command, <code>for</code> command, <code>case</code> command,
|
|
<code>select</code> command, every arithmetic <code>for</code> command, and before
|
|
the first command executes in a shell function.
|
|
Refer to the description of the <code>extglob</code> option to the
|
|
<code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>) for details of its
|
|
effect on the <code>DEBUG</code> trap.
|
|
If a <var>sigspec</var> is <code>ERR</code>, the command <var>arg</var>
|
|
is executed whenever a simple command has a non-zero exit status,
|
|
subject to the following conditions.
|
|
The <code>ERR</code> trap is not executed if the failed command is part of the
|
|
command list immediately following an <code>until</code> or <code>while</code> keyword,
|
|
part of the test in an <code>if</code> statement,
|
|
part of a <code>&&</code> or <code>||</code> list, or if the command's return
|
|
status is being inverted using <code>!</code>.
|
|
These are the same conditions obeyed by the <code>errexit</code> option.
|
|
If a <var>sigspec</var> is <code>RETURN</code>, the command <var>arg</var> is executed
|
|
each time a shell function or a script executed with the <code>.</code> or
|
|
<code>source</code> builtins finishes executing.
|
|
|
|
<p>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 child process when it is created.
|
|
|
|
<p>The return status is zero unless a <var>sigspec</var> does not specify a
|
|
valid signal.
|
|
|
|
<br><dt><code>umask</code><dd><a name="index-umask-125"></a>
|
|
<pre class="example"> umask [-p] [-S] [<var>mode</var>]
|
|
</pre>
|
|
<p>Set the shell process's file creation mask to <var>mode</var>. If
|
|
<var>mode</var> 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 <code>chmod</code> command. If <var>mode</var> is
|
|
omitted, the current value of the mask is printed. If the <samp><span class="option">-S</span></samp>
|
|
option is supplied without a <var>mode</var> argument, the mask is printed
|
|
in a symbolic format.
|
|
If the <samp><span class="option">-p</span></samp> option is supplied, and <var>mode</var>
|
|
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 <var>mode</var> argument is supplied, and non-zero otherwise.
|
|
|
|
<p>Note that when the mode is interpreted as an octal number, each number
|
|
of the umask is subtracted from <code>7</code>. Thus, a umask of <code>022</code>
|
|
results in permissions of <code>755</code>.
|
|
|
|
<br><dt><code>unset</code><dd><a name="index-unset-126"></a>
|
|
<pre class="example"> unset [-fv] [<var>name</var>]
|
|
</pre>
|
|
<p>Each variable or function <var>name</var> is removed.
|
|
If no options are supplied, or the <samp><span class="option">-v</span></samp> option is given, each
|
|
<var>name</var> refers to a shell variable.
|
|
If the <samp><span class="option">-f</span></samp> option is given, the <var>name</var>s refer to shell
|
|
functions, and the function definition is removed.
|
|
Readonly variables and functions may not be unset.
|
|
The return status is zero unless a <var>name</var> is readonly.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-Builtins"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Modifying-Shell-Behavior">Modifying Shell Behavior</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">4.2 Bash Builtin Commands</h3>
|
|
|
|
<p>This section describes builtin commands which are unique to
|
|
or have been extended in Bash.
|
|
Some of these commands are specified in the <span class="sc">posix</span> standard.
|
|
|
|
<dl>
|
|
<dt><code>alias</code><dd><a name="index-alias-127"></a>
|
|
<pre class="example"> alias [<code>-p</code>] [<var>name</var>[=<var>value</var>] ...]
|
|
</pre>
|
|
<p>Without arguments or with the <samp><span class="option">-p</span></samp> option, <code>alias</code> 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 <var>name</var>
|
|
whose <var>value</var> is given. If no <var>value</var> is given, the name
|
|
and value of the alias is printed.
|
|
Aliases are described in <a href="#Aliases">Aliases</a>.
|
|
|
|
<br><dt><code>bind</code><dd><a name="index-bind-128"></a>
|
|
<pre class="example"> bind [-m <var>keymap</var>] [-lpsvPSV]
|
|
bind [-m <var>keymap</var>] [-q <var>function</var>] [-u <var>function</var>] [-r <var>keyseq</var>]
|
|
bind [-m <var>keymap</var>] -f <var>filename</var>
|
|
bind [-m <var>keymap</var>] -x <var>keyseq:shell-command</var>
|
|
bind [-m <var>keymap</var>] <var>keyseq:function-name</var>
|
|
bind <var>readline-command</var>
|
|
</pre>
|
|
<p>Display current Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>)
|
|
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 (see <a href="#Readline-Init-File">Readline Init File</a>),
|
|
but each binding or command must be passed as a separate argument; e.g.,
|
|
`<samp><span class="samp">"\C-x\C-r":re-read-init-file</span></samp>'.
|
|
Options, if supplied, have the following meanings:
|
|
|
|
<dl>
|
|
<dt><code>-m </code><var>keymap</var><dd>Use <var>keymap</var> as the keymap to be affected by
|
|
the subsequent bindings. Acceptable <var>keymap</var>
|
|
names are
|
|
<code>emacs</code>,
|
|
<code>emacs-standard</code>,
|
|
<code>emacs-meta</code>,
|
|
<code>emacs-ctlx</code>,
|
|
<code>vi</code>,
|
|
<code>vi-move</code>,
|
|
<code>vi-command</code>, and
|
|
<code>vi-insert</code>.
|
|
<code>vi</code> is equivalent to <code>vi-command</code>;
|
|
<code>emacs</code> is equivalent to <code>emacs-standard</code>.
|
|
|
|
<br><dt><code>-l</code><dd>List the names of all Readline functions.
|
|
|
|
<br><dt><code>-p</code><dd>Display Readline function names and bindings in such a way that they
|
|
can be used as input or in a Readline initialization file.
|
|
|
|
<br><dt><code>-P</code><dd>List current Readline function names and bindings.
|
|
|
|
<br><dt><code>-v</code><dd>Display Readline variable names and values in such a way that they
|
|
can be used as input or in a Readline initialization file.
|
|
|
|
<br><dt><code>-V</code><dd>List current Readline variable names and values.
|
|
|
|
<br><dt><code>-s</code><dd>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.
|
|
|
|
<br><dt><code>-S</code><dd>Display Readline key sequences bound to macros and the strings they output.
|
|
|
|
<br><dt><code>-f </code><var>filename</var><dd>Read key bindings from <var>filename</var>.
|
|
|
|
<br><dt><code>-q </code><var>function</var><dd>Query about which keys invoke the named <var>function</var>.
|
|
|
|
<br><dt><code>-u </code><var>function</var><dd>Unbind all keys bound to the named <var>function</var>.
|
|
|
|
<br><dt><code>-r </code><var>keyseq</var><dd>Remove any current binding for <var>keyseq</var>.
|
|
|
|
<br><dt><code>-x </code><var>keyseq:shell-command</var><dd>Cause <var>shell-command</var> to be executed whenever <var>keyseq</var> is
|
|
entered.
|
|
|
|
</dl>
|
|
|
|
<p class="noindent">The return status is zero unless an invalid option is supplied or an
|
|
error occurs.
|
|
|
|
<br><dt><code>builtin</code><dd><a name="index-builtin-129"></a>
|
|
<pre class="example"> builtin [<var>shell-builtin</var> [<var>args</var>]]
|
|
</pre>
|
|
<p>Run a shell builtin, passing it <var>args</var>, 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 <var>shell-builtin</var> is not a shell
|
|
builtin command.
|
|
|
|
<br><dt><code>caller</code><dd><a name="index-caller-130"></a>
|
|
<pre class="example"> caller [<var>expr</var>]
|
|
</pre>
|
|
<p>Returns the context of any active subroutine call (a shell function or
|
|
a script executed with the <code>.</code> or <code>source</code> builtins).
|
|
|
|
<p>Without <var>expr</var>, <code>caller</code> displays the line number and source
|
|
filename of the current subroutine call.
|
|
If a non-negative integer is supplied as <var>expr</var>, <code>caller</code>
|
|
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.
|
|
|
|
<p>The return value is 0 unless the shell is not executing a subroutine
|
|
call or <var>expr</var> does not correspond to a valid position in the
|
|
call stack.
|
|
|
|
<br><dt><code>command</code><dd><a name="index-command-131"></a>
|
|
<pre class="example"> command [-pVv] <var>command</var> [<var>arguments</var> ...]
|
|
</pre>
|
|
<p>Runs <var>command</var> with <var>arguments</var> ignoring any shell function
|
|
named <var>command</var>.
|
|
Only shell builtin commands or commands found by searching the
|
|
<samp><span class="env">PATH</span></samp> are executed.
|
|
If there is a shell function named <code>ls</code>, running `<samp><span class="samp">command ls</span></samp>'
|
|
within the function will execute the external command <code>ls</code>
|
|
instead of calling the function recursively.
|
|
The <samp><span class="option">-p</span></samp> option means to use a default value for <samp><span class="env">PATH</span></samp>
|
|
that is guaranteed to find all of the standard utilities.
|
|
The return status in this case is 127 if <var>command</var> cannot be
|
|
found or an error occurred, and the exit status of <var>command</var>
|
|
otherwise.
|
|
|
|
<p>If either the <samp><span class="option">-V</span></samp> or <samp><span class="option">-v</span></samp> option is supplied, a
|
|
description of <var>command</var> is printed. The <samp><span class="option">-v</span></samp> option
|
|
causes a single word indicating the command or file name used to
|
|
invoke <var>command</var> to be displayed; the <samp><span class="option">-V</span></samp> option produces
|
|
a more verbose description. In this case, the return status is
|
|
zero if <var>command</var> is found, and non-zero if not.
|
|
|
|
<br><dt><code>declare</code><dd><a name="index-declare-132"></a>
|
|
<pre class="example"> declare [-afFirtx] [-p] [<var>name</var>[=<var>value</var>] ...]
|
|
</pre>
|
|
<p>Declare variables and give them attributes. If no <var>name</var>s
|
|
are given, then display the values of variables instead.
|
|
|
|
<p>The <samp><span class="option">-p</span></samp> option will display the attributes and values of each
|
|
<var>name</var>.
|
|
When <samp><span class="option">-p</span></samp> is used, additional options are ignored.
|
|
The <samp><span class="option">-F</span></samp> option inhibits the display of function definitions;
|
|
only the function name and attributes are printed.
|
|
If the <code>extdebug</code> shell option is enabled using <code>shopt</code>
|
|
(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), the source file name and line number where
|
|
the function is defined are displayed as well.
|
|
<samp><span class="option">-F</span></samp> implies <samp><span class="option">-f</span></samp>.
|
|
The following options can be used to restrict output to variables with
|
|
the specified attributes or to give variables attributes:
|
|
|
|
<dl>
|
|
<dt><code>-a</code><dd>Each <var>name</var> is an array variable (see <a href="#Arrays">Arrays</a>).
|
|
|
|
<br><dt><code>-f</code><dd>Use function names only.
|
|
|
|
<br><dt><code>-i</code><dd>The variable is to be treated as
|
|
an integer; arithmetic evaluation (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>) is
|
|
performed when the variable is assigned a value.
|
|
|
|
<br><dt><code>-r</code><dd>Make <var>name</var>s readonly. These names cannot then be assigned values
|
|
by subsequent assignment statements or unset.
|
|
|
|
<br><dt><code>-t</code><dd>Give each <var>name</var> the <code>trace</code> attribute.
|
|
Traced functions inherit the <code>DEBUG</code> and <code>RETURN</code> traps from
|
|
the calling shell.
|
|
The trace attribute has no special meaning for variables.
|
|
|
|
<br><dt><code>-x</code><dd>Mark each <var>name</var> for export to subsequent commands via
|
|
the environment.
|
|
</dl>
|
|
|
|
<p>Using `<samp><span class="samp">+</span></samp>' instead of `<samp><span class="samp">-</span></samp>' turns off the attribute instead,
|
|
with the exceptions that `<samp><span class="samp">+a</span></samp>'
|
|
may not be used to destroy an array variable and `<samp><span class="samp">+r</span></samp>' will not
|
|
remove the readonly attribute.
|
|
When used in a function, <code>declare</code> makes each <var>name</var> local,
|
|
as with the <code>local</code> command. If a variable name is followed by
|
|
=<var>value</var>, the value of the variable is set to <var>value</var>.
|
|
|
|
<p>The return status is zero unless an invalid option is encountered,
|
|
an attempt is made to define a function using `<samp><span class="samp">-f foo=bar</span></samp>',
|
|
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 (see <a href="#Arrays">Arrays</a>),
|
|
one of the <var>names</var> 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 <samp><span class="option">-f</span></samp>.
|
|
|
|
<br><dt><code>echo</code><dd><a name="index-echo-133"></a>
|
|
<pre class="example"> echo [-neE] [<var>arg</var> ...]
|
|
</pre>
|
|
<p>Output the <var>arg</var>s, separated by spaces, terminated with a
|
|
newline.
|
|
The return status is always 0.
|
|
If <samp><span class="option">-n</span></samp> is specified, the trailing newline is suppressed.
|
|
If the <samp><span class="option">-e</span></samp> option is given, interpretation of the following
|
|
backslash-escaped characters is enabled.
|
|
The <samp><span class="option">-E</span></samp> option disables the interpretation of these escape characters,
|
|
even on systems where they are interpreted by default.
|
|
The <code>xpg_echo</code> shell option may be used to
|
|
dynamically determine whether or not <code>echo</code> expands these
|
|
escape characters by default.
|
|
<code>echo</code> does not interpret <samp><span class="option">--</span></samp> to mean the end of options.
|
|
|
|
<p><code>echo</code> interprets the following escape sequences:
|
|
<dl>
|
|
<dt><code>\a</code><dd>alert (bell)
|
|
<br><dt><code>\b</code><dd>backspace
|
|
<br><dt><code>\c</code><dd>suppress trailing newline
|
|
<br><dt><code>\e</code><dd>escape
|
|
<br><dt><code>\f</code><dd>form feed
|
|
<br><dt><code>\n</code><dd>new line
|
|
<br><dt><code>\r</code><dd>carriage return
|
|
<br><dt><code>\t</code><dd>horizontal tab
|
|
<br><dt><code>\v</code><dd>vertical tab
|
|
<br><dt><code>\\</code><dd>backslash
|
|
<br><dt><code>\0</code><var>nnn</var><dd>the eight-bit character whose value is the octal value <var>nnn</var>
|
|
(zero to three octal digits)
|
|
<br><dt><code>\x</code><var>HH</var><dd>the eight-bit character whose value is the hexadecimal value <var>HH</var>
|
|
(one or two hex digits)
|
|
</dl>
|
|
|
|
<br><dt><code>enable</code><dd><a name="index-enable-134"></a>
|
|
<pre class="example"> enable [-a] [-dnps] [-f <var>filename</var>] [<var>name</var> ...]
|
|
</pre>
|
|
<p>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 <samp><span class="option">-n</span></samp> is used, the <var>name</var>s become disabled. Otherwise
|
|
<var>name</var>s are enabled. For example, to use the <code>test</code> binary
|
|
found via <samp><span class="env">$PATH</span></samp> instead of the shell builtin version, type
|
|
`<samp><span class="samp">enable -n test</span></samp>'.
|
|
|
|
<p>If the <samp><span class="option">-p</span></samp> option is supplied, or no <var>name</var> arguments appear,
|
|
a list of shell builtins is printed. With no other arguments, the list
|
|
consists of all enabled shell builtins.
|
|
The <samp><span class="option">-a</span></samp> option means to list
|
|
each builtin with an indication of whether or not it is enabled.
|
|
|
|
<p>The <samp><span class="option">-f</span></samp> option means to load the new builtin command <var>name</var>
|
|
from shared object <var>filename</var>, on systems that support dynamic loading.
|
|
The <samp><span class="option">-d</span></samp> option will delete a builtin loaded with <samp><span class="option">-f</span></samp>.
|
|
|
|
<p>If there are no options, a list of the shell builtins is displayed.
|
|
The <samp><span class="option">-s</span></samp> option restricts <code>enable</code> to the <span class="sc">posix</span> special
|
|
builtins. If <samp><span class="option">-s</span></samp> is used with <samp><span class="option">-f</span></samp>, the new builtin becomes
|
|
a special builtin (see <a href="#Special-Builtins">Special Builtins</a>).
|
|
|
|
<p>The return status is zero unless a <var>name</var> is not a shell builtin
|
|
or there is an error loading a new builtin from a shared object.
|
|
|
|
<br><dt><code>help</code><dd><a name="index-help-135"></a>
|
|
<pre class="example"> help [-s] [<var>pattern</var>]
|
|
</pre>
|
|
<p>Display helpful information about builtin commands.
|
|
If <var>pattern</var> is specified, <code>help</code> gives detailed help
|
|
on all commands matching <var>pattern</var>, otherwise a list of
|
|
the builtins is printed.
|
|
The <samp><span class="option">-s</span></samp> option restricts the information displayed to a short
|
|
usage synopsis.
|
|
The return status is zero unless no command matches <var>pattern</var>.
|
|
|
|
<br><dt><code>let</code><dd><a name="index-let-136"></a>
|
|
<pre class="example"> let <var>expression</var> [<var>expression</var>]
|
|
</pre>
|
|
<p>The <code>let</code> builtin allows arithmetic to be performed on shell
|
|
variables. Each <var>expression</var> is evaluated according to the
|
|
rules given below in <a href="#Shell-Arithmetic">Shell Arithmetic</a>. If the
|
|
last <var>expression</var> evaluates to 0, <code>let</code> returns 1;
|
|
otherwise 0 is returned.
|
|
|
|
<br><dt><code>local</code><dd><a name="index-local-137"></a>
|
|
<pre class="example"> local [<var>option</var>] <var>name</var>[=<var>value</var>] ...
|
|
</pre>
|
|
<p>For each argument, a local variable named <var>name</var> is created,
|
|
and assigned <var>value</var>.
|
|
The <var>option</var> can be any of the options accepted by <code>declare</code>.
|
|
<code>local</code> can only be used within a function; it makes the variable
|
|
<var>name</var> have a visible scope restricted to that function and its
|
|
children. The return status is zero unless <code>local</code> is used outside
|
|
a function, an invalid <var>name</var> is supplied, or <var>name</var> is a
|
|
readonly variable.
|
|
|
|
<br><dt><code>logout</code><dd><a name="index-logout-138"></a>
|
|
<pre class="example"> logout [<var>n</var>]
|
|
</pre>
|
|
<p>Exit a login shell, returning a status of <var>n</var> to the shell's
|
|
parent.
|
|
|
|
<br><dt><code>printf</code><dd><a name="index-printf-139"></a>
|
|
<pre class="example"> <code>printf</code> [-v <var>var</var>] <var>format</var> [<var>arguments</var>]
|
|
</pre>
|
|
<p>Write the formatted <var>arguments</var> to the standard output under the
|
|
control of the <var>format</var>.
|
|
The <var>format</var> 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
|
|
<var>argument</var>.
|
|
In addition to the standard <code>printf(1)</code> formats, `<samp><span class="samp">%b</span></samp>' causes
|
|
<code>printf</code> to expand backslash escape sequences in the corresponding
|
|
<var>argument</var>,
|
|
(except that `<samp><span class="samp">\c</span></samp>' terminates output, backslashes in
|
|
`<samp><span class="samp">\'</span></samp>', `<samp><span class="samp">\"</span></samp>', and `<samp><span class="samp">\?</span></samp>' are not removed, and octal escapes
|
|
beginning with `<samp><span class="samp">\0</span></samp>' may contain up to four digits),
|
|
and `<samp><span class="samp">%q</span></samp>' causes <code>printf</code> to output the
|
|
corresponding <var>argument</var> in a format that can be reused as shell input.
|
|
|
|
<p>The <samp><span class="option">-v</span></samp> option causes the output to be assigned to the variable
|
|
<var>var</var> rather than being printed to the standard output.
|
|
|
|
<p>The <var>format</var> is reused as necessary to consume all of the <var>arguments</var>.
|
|
If the <var>format</var> requires more <var>arguments</var> 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.
|
|
|
|
<br><dt><code>read</code><dd><a name="index-read-140"></a>
|
|
<pre class="example"> read [-ers] [-a <var>aname</var>] [-d <var>delim</var>] [-n <var>nchars</var>] [-p <var>prompt</var>] [-t <var>timeout</var>] [-u <var>fd</var>] [<var>name</var> ...]
|
|
</pre>
|
|
<p>One line is read from the standard input, or from the file descriptor
|
|
<var>fd</var> supplied as an argument to the <samp><span class="option">-u</span></samp> option, and the first word
|
|
is assigned to the first <var>name</var>, the second word to the second <var>name</var>,
|
|
and so on, with leftover words and their intervening separators assigned
|
|
to the last <var>name</var>.
|
|
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 <samp><span class="env">IFS</span></samp> variable
|
|
are used to split the line into words.
|
|
The backslash character `<samp><span class="samp">\</span></samp>' 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 <samp><span class="env">REPLY</span></samp>.
|
|
The return code is zero, unless end-of-file is encountered, <code>read</code>
|
|
times out, or an invalid file descriptor is supplied as the argument to
|
|
<samp><span class="option">-u</span></samp>.
|
|
Options, if supplied, have the following meanings:
|
|
|
|
<dl>
|
|
<dt><code>-a </code><var>aname</var><dd>The words are assigned to sequential indices of the array variable
|
|
<var>aname</var>, starting at 0.
|
|
All elements are removed from <var>aname</var> before the assignment.
|
|
Other <var>name</var> arguments are ignored.
|
|
|
|
<br><dt><code>-d </code><var>delim</var><dd>The first character of <var>delim</var> is used to terminate the input line,
|
|
rather than newline.
|
|
|
|
<br><dt><code>-e</code><dd>Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>) is used to obtain the line.
|
|
|
|
<br><dt><code>-n </code><var>nchars</var><dd><code>read</code> returns after reading <var>nchars</var> characters rather than
|
|
waiting for a complete line of input.
|
|
|
|
<br><dt><code>-p </code><var>prompt</var><dd>Display <var>prompt</var>, without a trailing newline, before attempting
|
|
to read any input.
|
|
The prompt is displayed only if input is coming from a terminal.
|
|
|
|
<br><dt><code>-r</code><dd>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.
|
|
|
|
<br><dt><code>-s</code><dd>Silent mode. If input is coming from a terminal, characters are
|
|
not echoed.
|
|
|
|
<br><dt><code>-t </code><var>timeout</var><dd>Cause <code>read</code> to time out and return failure if a complete line of
|
|
input is not read within <var>timeout</var> seconds.
|
|
This option has no effect if <code>read</code> is not reading input from the
|
|
terminal or a pipe.
|
|
|
|
<br><dt><code>-u </code><var>fd</var><dd>Read input from file descriptor <var>fd</var>.
|
|
|
|
</dl>
|
|
|
|
<br><dt><code>source</code><dd><a name="index-source-141"></a>
|
|
<pre class="example"> source <var>filename</var>
|
|
</pre>
|
|
<p>A synonym for <code>.</code> (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
<br><dt><code>type</code><dd><a name="index-type-142"></a>
|
|
<pre class="example"> type [-afptP] [<var>name</var> ...]
|
|
</pre>
|
|
<p>For each <var>name</var>, indicate how it would be interpreted if used as a
|
|
command name.
|
|
|
|
<p>If the <samp><span class="option">-t</span></samp> option is used, <code>type</code> prints a single word
|
|
which is one of `<samp><span class="samp">alias</span></samp>', `<samp><span class="samp">function</span></samp>', `<samp><span class="samp">builtin</span></samp>',
|
|
`<samp><span class="samp">file</span></samp>' or `<samp><span class="samp">keyword</span></samp>',
|
|
if <var>name</var> is an alias, shell function, shell builtin,
|
|
disk file, or shell reserved word, respectively.
|
|
If the <var>name</var> is not found, then nothing is printed, and
|
|
<code>type</code> returns a failure status.
|
|
|
|
<p>If the <samp><span class="option">-p</span></samp> option is used, <code>type</code> either returns the name
|
|
of the disk file that would be executed, or nothing if <samp><span class="option">-t</span></samp>
|
|
would not return `<samp><span class="samp">file</span></samp>'.
|
|
|
|
<p>The <samp><span class="option">-P</span></samp> option forces a path search for each <var>name</var>, even if
|
|
<samp><span class="option">-t</span></samp> would not return `<samp><span class="samp">file</span></samp>'.
|
|
|
|
<p>If a command is hashed, <samp><span class="option">-p</span></samp> and <samp><span class="option">-P</span></samp> print the hashed value,
|
|
not necessarily the file that appears first in <code>$PATH</code>.
|
|
|
|
<p>If the <samp><span class="option">-a</span></samp> option is used, <code>type</code> returns all of the places
|
|
that contain an executable named <var>file</var>.
|
|
This includes aliases and functions, if and only if the <samp><span class="option">-p</span></samp> option
|
|
is not also used.
|
|
|
|
<p>If the <samp><span class="option">-f</span></samp> option is used, <code>type</code> does not attempt to find
|
|
shell functions, as with the <code>command</code> builtin.
|
|
|
|
<p>The return status is zero if any of the <var>names</var> are found, non-zero
|
|
if none are found.
|
|
|
|
<br><dt><code>typeset</code><dd><a name="index-typeset-143"></a>
|
|
<pre class="example"> typeset [-afFrxi] [-p] [<var>name</var>[=<var>value</var>] ...]
|
|
</pre>
|
|
<p>The <code>typeset</code> command is supplied for compatibility with the Korn
|
|
shell; however, it has been deprecated in favor of the <code>declare</code>
|
|
builtin command.
|
|
|
|
<br><dt><code>ulimit</code><dd><a name="index-ulimit-144"></a>
|
|
<pre class="example"> ulimit [-acdefilmnpqrstuvxSH] [<var>limit</var>]
|
|
</pre>
|
|
<p><code>ulimit</code> 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:
|
|
<dl>
|
|
<dt><code>-S</code><dd>Change and report the soft limit associated with a resource.
|
|
|
|
<br><dt><code>-H</code><dd>Change and report the hard limit associated with a resource.
|
|
|
|
<br><dt><code>-a</code><dd>All current limits are reported.
|
|
|
|
<br><dt><code>-c</code><dd>The maximum size of core files created.
|
|
|
|
<br><dt><code>-d</code><dd>The maximum size of a process's data segment.
|
|
|
|
<br><dt><code>-e</code><dd>The maximum scheduling priority ("nice").
|
|
|
|
<br><dt><code>-f</code><dd>The maximum size of files written by the shell and its children.
|
|
|
|
<br><dt><code>-i</code><dd>The maximum number of pending signals.
|
|
|
|
<br><dt><code>-l</code><dd>The maximum size that may be locked into memory.
|
|
|
|
<br><dt><code>-m</code><dd>The maximum resident set size.
|
|
|
|
<br><dt><code>-n</code><dd>The maximum number of open file descriptors.
|
|
|
|
<br><dt><code>-p</code><dd>The pipe buffer size.
|
|
|
|
<br><dt><code>-q</code><dd>The maximum number of bytes in POSIX message queues.
|
|
|
|
<br><dt><code>-r</code><dd>The maximum real-time scheduling priority.
|
|
|
|
<br><dt><code>-s</code><dd>The maximum stack size.
|
|
|
|
<br><dt><code>-t</code><dd>The maximum amount of cpu time in seconds.
|
|
|
|
<br><dt><code>-u</code><dd>The maximum number of processes available to a single user.
|
|
|
|
<br><dt><code>-v</code><dd>The maximum amount of virtual memory available to the process.
|
|
|
|
<br><dt><code>-x</code><dd>The maximum number of file locks.
|
|
|
|
</dl>
|
|
|
|
<p>If <var>limit</var> is given, it is the new value of the specified resource;
|
|
the special <var>limit</var> values <code>hard</code>, <code>soft</code>, and
|
|
<code>unlimited</code> stand for the current hard limit, the current soft limit,
|
|
and no limit, respectively.
|
|
Otherwise, the current value of the soft limit for the specified resource
|
|
is printed, unless the <samp><span class="option">-H</span></samp> option is supplied.
|
|
When setting new limits, if neither <samp><span class="option">-H</span></samp> nor <samp><span class="option">-S</span></samp> is supplied,
|
|
both the hard and soft limits are set.
|
|
If no option is given, then <samp><span class="option">-f</span></samp> is assumed. Values are in 1024-byte
|
|
increments, except for <samp><span class="option">-t</span></samp>, which is in seconds, <samp><span class="option">-p</span></samp>,
|
|
which is in units of 512-byte blocks, and <samp><span class="option">-n</span></samp> and <samp><span class="option">-u</span></samp>, which
|
|
are unscaled values.
|
|
|
|
<p>The return status is zero unless an invalid option or argument is supplied,
|
|
or an error occurs while setting a new limit.
|
|
|
|
<br><dt><code>unalias</code><dd><a name="index-unalias-145"></a>
|
|
<pre class="example"> unalias [-a] [<var>name</var> ... ]
|
|
</pre>
|
|
<p>Remove each <var>name</var> from the list of aliases. If <samp><span class="option">-a</span></samp> is
|
|
supplied, all aliases are removed.
|
|
Aliases are described in <a href="#Aliases">Aliases</a>.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Modifying-Shell-Behavior"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Special-Builtins">Special Builtins</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Bash-Builtins">Bash Builtins</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">4.3 Modifying Shell Behavior</h3>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#The-Set-Builtin">The Set Builtin</a>: Change the values of shell attributes and
|
|
positional parameters.
|
|
<li><a accesskey="2" href="#The-Shopt-Builtin">The Shopt Builtin</a>: Modify shell optional behavior.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="The-Set-Builtin"></a>
|
|
Next: <a rel="next" accesskey="n" href="#The-Shopt-Builtin">The Shopt Builtin</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Modifying-Shell-Behavior">Modifying Shell Behavior</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">4.3.1 The Set Builtin</h4>
|
|
|
|
<p>This builtin is so complicated that it deserves its own section. <code>set</code>
|
|
allows you to change the values of shell options and set the positional
|
|
parameters, or to display the names and values of shell variables.
|
|
|
|
<dl>
|
|
<dt><code>set</code><dd><a name="index-set-146"></a>
|
|
<pre class="example"> set [--abefhkmnptuvxBCEHPT] [-o <var>option</var>] [<var>argument</var> ...]
|
|
set [+abefhkmnptuvxBCEHPT] [+o <var>option</var>] [<var>argument</var> ...]
|
|
</pre>
|
|
<p>If no options or arguments are supplied, <code>set</code> 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 <span class="sc">posix</span> mode, only shell variables are listed.
|
|
|
|
<p>When options are supplied, they set or unset shell attributes.
|
|
Options, if specified, have the following meanings:
|
|
|
|
<dl>
|
|
<dt><code>-a</code><dd>Mark variables and function which are modified or created for export
|
|
to the environment of subsequent commands.
|
|
|
|
<br><dt><code>-b</code><dd>Cause the status of terminated background jobs to be reported
|
|
immediately, rather than before printing the next primary prompt.
|
|
|
|
<br><dt><code>-e</code><dd>Exit immediately if a simple command (see <a href="#Simple-Commands">Simple Commands</a>) exits
|
|
with a non-zero status, unless the command that fails is part of the
|
|
command list immediately following a <code>while</code> or <code>until</code> keyword,
|
|
part of the test in an <code>if</code> statement,
|
|
part of a <code>&&</code> or <code>||</code> list,
|
|
any command in a pipeline but the last,
|
|
or if the command's return status is being inverted using <code>!</code>.
|
|
A trap on <code>ERR</code>, if set, is executed before the shell exits.
|
|
|
|
<br><dt><code>-f</code><dd>Disable file name generation (globbing).
|
|
|
|
<br><dt><code>-h</code><dd>Locate and remember (hash) commands as they are looked up for execution.
|
|
This option is enabled by default.
|
|
|
|
<br><dt><code>-k</code><dd>All arguments in the form of assignment statements are placed
|
|
in the environment for a command, not just those that precede
|
|
the command name.
|
|
|
|
<br><dt><code>-m</code><dd>Job control is enabled (see <a href="#Job-Control">Job Control</a>).
|
|
|
|
<br><dt><code>-n</code><dd>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.
|
|
|
|
<br><dt><code>-o </code><var>option-name</var><dd>
|
|
Set the option corresponding to <var>option-name</var>:
|
|
|
|
<dl>
|
|
<dt><code>allexport</code><dd>Same as <code>-a</code>.
|
|
|
|
<br><dt><code>braceexpand</code><dd>Same as <code>-B</code>.
|
|
|
|
<br><dt><code>emacs</code><dd>Use an <code>emacs</code>-style line editing interface (see <a href="#Command-Line-Editing">Command Line Editing</a>).
|
|
|
|
<br><dt><code>errexit</code><dd>Same as <code>-e</code>.
|
|
|
|
<br><dt><code>errtrace</code><dd>Same as <code>-E</code>.
|
|
|
|
<br><dt><code>functrace</code><dd>Same as <code>-T</code>.
|
|
|
|
<br><dt><code>hashall</code><dd>Same as <code>-h</code>.
|
|
|
|
<br><dt><code>histexpand</code><dd>Same as <code>-H</code>.
|
|
|
|
<br><dt><code>history</code><dd>Enable command history, as described in <a href="#Bash-History-Facilities">Bash History Facilities</a>.
|
|
This option is on by default in interactive shells.
|
|
|
|
<br><dt><code>ignoreeof</code><dd>An interactive shell will not exit upon reading EOF.
|
|
|
|
<br><dt><code>keyword</code><dd>Same as <code>-k</code>.
|
|
|
|
<br><dt><code>monitor</code><dd>Same as <code>-m</code>.
|
|
|
|
<br><dt><code>noclobber</code><dd>Same as <code>-C</code>.
|
|
|
|
<br><dt><code>noexec</code><dd>Same as <code>-n</code>.
|
|
|
|
<br><dt><code>noglob</code><dd>Same as <code>-f</code>.
|
|
|
|
<br><dt><code>nolog</code><dd>Currently ignored.
|
|
|
|
<br><dt><code>notify</code><dd>Same as <code>-b</code>.
|
|
|
|
<br><dt><code>nounset</code><dd>Same as <code>-u</code>.
|
|
|
|
<br><dt><code>onecmd</code><dd>Same as <code>-t</code>.
|
|
|
|
<br><dt><code>physical</code><dd>Same as <code>-P</code>.
|
|
|
|
<br><dt><code>pipefail</code><dd>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.
|
|
|
|
<br><dt><code>posix</code><dd>Change the behavior of Bash where the default operation differs
|
|
from the <span class="sc">posix</span> standard to match the standard
|
|
(see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
|
|
This is intended to make Bash behave as a strict superset of that
|
|
standard.
|
|
|
|
<br><dt><code>privileged</code><dd>Same as <code>-p</code>.
|
|
|
|
<br><dt><code>verbose</code><dd>Same as <code>-v</code>.
|
|
|
|
<br><dt><code>vi</code><dd>Use a <code>vi</code>-style line editing interface.
|
|
|
|
<br><dt><code>xtrace</code><dd>Same as <code>-x</code>.
|
|
</dl>
|
|
|
|
<br><dt><code>-p</code><dd>Turn on privileged mode.
|
|
In this mode, the <samp><span class="env">$BASH_ENV</span></samp> and <samp><span class="env">$ENV</span></samp> files are not
|
|
processed, shell functions are not inherited from the environment,
|
|
and the <samp><span class="env">SHELLOPTS</span></samp> variable, if it appears in the environment,
|
|
is ignored.
|
|
If the shell is started with the effective user (group) id not equal to the
|
|
real user (group) id, and the <code>-p</code> option is not supplied, these actions
|
|
are taken and the effective user id is set to the real user id.
|
|
If the <code>-p</code> 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.
|
|
|
|
<br><dt><code>-t</code><dd>Exit after reading and executing one command.
|
|
|
|
<br><dt><code>-u</code><dd>Treat unset variables as an error when performing parameter expansion.
|
|
An error message will be written to the standard error, and a non-interactive
|
|
shell will exit.
|
|
|
|
<br><dt><code>-v</code><dd>Print shell input lines as they are read.
|
|
|
|
<br><dt><code>-x</code><dd>Print a trace of simple commands, <code>for</code> commands, <code>case</code>
|
|
commands, <code>select</code> commands, and arithmetic <code>for</code> commands
|
|
and their arguments or associated word lists after they are
|
|
expanded and before they are executed. The value of the <samp><span class="env">PS4</span></samp>
|
|
variable is expanded and the resultant value is printed before
|
|
the command and its expanded arguments.
|
|
|
|
<br><dt><code>-B</code><dd>The shell will perform brace expansion (see <a href="#Brace-Expansion">Brace Expansion</a>).
|
|
This option is on by default.
|
|
|
|
<br><dt><code>-C</code><dd>Prevent output redirection using `<samp><span class="samp">></span></samp>', `<samp><span class="samp">>&</span></samp>', and `<samp><span class="samp"><></span></samp>'
|
|
from overwriting existing files.
|
|
|
|
<br><dt><code>-E</code><dd>If set, any trap on <code>ERR</code> is inherited by shell functions, command
|
|
substitutions, and commands executed in a subshell environment.
|
|
The <code>ERR</code> trap is normally not inherited in such cases.
|
|
|
|
<br><dt><code>-H</code><dd>Enable `<samp><span class="samp">!</span></samp>' style history substitution (see <a href="#History-Interaction">History Interaction</a>).
|
|
This option is on by default for interactive shells.
|
|
|
|
<br><dt><code>-P</code><dd>If set, do not follow symbolic links when performing commands such as
|
|
<code>cd</code> 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.
|
|
|
|
<p>For example, if <samp><span class="file">/usr/sys</span></samp> is a symbolic link to <samp><span class="file">/usr/local/sys</span></samp>
|
|
then:
|
|
<pre class="example"> $ cd /usr/sys; echo $PWD
|
|
/usr/sys
|
|
$ cd ..; pwd
|
|
/usr
|
|
</pre>
|
|
<p class="noindent">If <code>set -P</code> is on, then:
|
|
<pre class="example"> $ cd /usr/sys; echo $PWD
|
|
/usr/local/sys
|
|
$ cd ..; pwd
|
|
/usr/local
|
|
</pre>
|
|
<br><dt><code>-T</code><dd>If set, any trap on <code>DEBUG</code> and <code>RETURN</code> are inherited by
|
|
shell functions, command substitutions, and commands executed
|
|
in a subshell environment.
|
|
The <code>DEBUG</code> and <code>RETURN</code> traps are normally not inherited
|
|
in such cases.
|
|
|
|
<br><dt><code>--</code><dd>If no arguments follow this option, then the positional parameters are
|
|
unset. Otherwise, the positional parameters are set to the
|
|
<var>arguments</var>, even if some of them begin with a `<samp><span class="samp">-</span></samp>'.
|
|
|
|
<br><dt><code>-</code><dd>Signal the end of options, cause all remaining <var>arguments</var>
|
|
to be assigned to the positional parameters. The <samp><span class="option">-x</span></samp>
|
|
and <samp><span class="option">-v</span></samp> options are turned off.
|
|
If there are no arguments, the positional parameters remain unchanged.
|
|
</dl>
|
|
|
|
<p>Using `<samp><span class="samp">+</span></samp>' rather than `<samp><span class="samp">-</span></samp>' 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 <code>$-</code>.
|
|
|
|
<p>The remaining N <var>arguments</var> are positional parameters and are
|
|
assigned, in order, to <code>$1</code>, <code>$2</code>, <small class="dots">...</small> <code>$N</code>.
|
|
The special parameter <code>#</code> is set to N.
|
|
|
|
<p>The return status is always zero unless an invalid option is supplied.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="The-Shopt-Builtin"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#The-Set-Builtin">The Set Builtin</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Modifying-Shell-Behavior">Modifying Shell Behavior</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">4.3.2 The Shopt Builtin</h4>
|
|
|
|
<p>This builtin allows you to change additional shell optional behavior.
|
|
|
|
<dl>
|
|
<dt><code>shopt</code><dd><a name="index-shopt-147"></a>
|
|
<pre class="example"> shopt [-pqsu] [-o] [<var>optname</var> ...]
|
|
</pre>
|
|
<p>Toggle the values of variables controlling optional shell behavior.
|
|
With no options, or with the <samp><span class="option">-p</span></samp> option, a list of all settable
|
|
options is displayed, with an indication of whether or not each is set.
|
|
The <samp><span class="option">-p</span></samp> option causes output to be displayed in a form that
|
|
may be reused as input.
|
|
Other options have the following meanings:
|
|
|
|
<dl>
|
|
<dt><code>-s</code><dd>Enable (set) each <var>optname</var>.
|
|
|
|
<br><dt><code>-u</code><dd>Disable (unset) each <var>optname</var>.
|
|
|
|
<br><dt><code>-q</code><dd>Suppresses normal output; the return status
|
|
indicates whether the <var>optname</var> is set or unset.
|
|
If multiple <var>optname</var> arguments are given with <samp><span class="option">-q</span></samp>,
|
|
the return status is zero if all <var>optnames</var> are enabled;
|
|
non-zero otherwise.
|
|
|
|
<br><dt><code>-o</code><dd>Restricts the values of
|
|
<var>optname</var> to be those defined for the <samp><span class="option">-o</span></samp> option to the
|
|
<code>set</code> builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
</dl>
|
|
|
|
<p>If either <samp><span class="option">-s</span></samp> or <samp><span class="option">-u</span></samp>
|
|
is used with no <var>optname</var> arguments, the display is limited to
|
|
those options which are set or unset, respectively.
|
|
|
|
<p>Unless otherwise noted, the <code>shopt</code> options are disabled (off)
|
|
by default.
|
|
|
|
<p>The return status when listing options is zero if all <var>optnames</var>
|
|
are enabled, non-zero otherwise. When setting or unsetting options,
|
|
the return status is zero unless an <var>optname</var> is not a valid shell
|
|
option.
|
|
|
|
<p>The list of <code>shopt</code> options is:
|
|
<dl>
|
|
<dt><code>autocd</code><dd>If set, a command name that is the name of a directory is executed as if
|
|
it were the argument to the <code>cd</code> command.
|
|
This option is only used by interactive shells.
|
|
|
|
<br><dt><code>cdable_vars</code><dd>If this is set, an argument to the <code>cd</code> builtin command that
|
|
is not a directory is assumed to be the name of a variable whose
|
|
value is the directory to change to.
|
|
|
|
<br><dt><code>cdspell</code><dd>If set, minor errors in the spelling of a directory component in a
|
|
<code>cd</code> 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.
|
|
|
|
<br><dt><code>checkhash</code><dd>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.
|
|
|
|
<br><dt><code>checkjobs</code><dd>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 (see <a href="#Job-Control">Job Control</a>).
|
|
The shell always postpones exiting if any jobs are stopped.
|
|
|
|
<br><dt><code>checkwinsize</code><dd>If set, Bash checks the window size after each command
|
|
and, if necessary, updates the values of
|
|
<samp><span class="env">LINES</span></samp> and <samp><span class="env">COLUMNS</span></samp>.
|
|
|
|
<br><dt><code>cmdhist</code><dd>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.
|
|
|
|
<br><dt><code>dotglob</code><dd>If set, Bash includes filenames beginning with a `.' in
|
|
the results of filename expansion.
|
|
|
|
<br><dt><code>execfail</code><dd>If this is set, a non-interactive shell will not exit if
|
|
it cannot execute the file specified as an argument to the <code>exec</code>
|
|
builtin command. An interactive shell does not exit if <code>exec</code>
|
|
fails.
|
|
|
|
<br><dt><code>expand_aliases</code><dd>If set, aliases are expanded as described below under Aliases,
|
|
<a href="#Aliases">Aliases</a>.
|
|
This option is enabled by default for interactive shells.
|
|
|
|
<br><dt><code>extdebug</code><dd>If set, behavior intended for use by debuggers is enabled:
|
|
|
|
<ol type=1 start=1>
|
|
<li>The <samp><span class="option">-F</span></samp> option to the <code>declare</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>)
|
|
displays the source file name and line number corresponding to each function
|
|
name supplied as an argument.
|
|
|
|
<li>If the command run by the <code>DEBUG</code> trap returns a non-zero value, the
|
|
next command is skipped and not executed.
|
|
|
|
<li>If the command run by the <code>DEBUG</code> trap returns a value of 2, and the
|
|
shell is executing in a subroutine (a shell function or a shell script
|
|
executed by the <code>.</code> or <code>source</code> builtins), a call to
|
|
<code>return</code> is simulated.
|
|
|
|
<li><code>BASH_ARGC</code> and <code>BASH_ARGV</code> are updated as described in their
|
|
descriptions (see <a href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
<li>Function tracing is enabled: command substitution, shell functions, and
|
|
subshells invoked with <code>( </code><var>command</var><code> )</code> inherit the
|
|
<code>DEBUG</code> and <code>RETURN</code> traps.
|
|
|
|
<li>Error tracing is enabled: command substitution, shell functions, and
|
|
subshells invoked with <code>( </code><var>command</var><code> )</code> inherit the
|
|
<code>ERROR</code> trap.
|
|
</ol>
|
|
|
|
<br><dt><code>extglob</code><dd>If set, the extended pattern matching features described above
|
|
(see <a href="#Pattern-Matching">Pattern Matching</a>) are enabled.
|
|
|
|
<br><dt><code>extquote</code><dd>If set, <code>$'</code><var>string</var><code>'</code> and <code>$"</code><var>string</var><code>"</code> quoting is
|
|
performed within <code>${</code><var>parameter</var><code>}</code> expansions
|
|
enclosed in double quotes. This option is enabled by default.
|
|
|
|
<br><dt><code>failglob</code><dd>If set, patterns which fail to match filenames during pathname expansion
|
|
result in an expansion error.
|
|
|
|
<br><dt><code>force_fignore</code><dd>If set, the suffixes specified by the <samp><span class="env">FIGNORE</span></samp> shell variable
|
|
cause words to be ignored when performing word completion even if
|
|
the ignored words are the only possible completions.
|
|
See <a href="#Bash-Variables">Bash Variables</a>, for a description of <samp><span class="env">FIGNORE</span></samp>.
|
|
This option is enabled by default.
|
|
|
|
<br><dt><code>gnu_errfmt</code><dd>If set, shell error messages are written in the standard <span class="sc">gnu</span> error
|
|
message format.
|
|
|
|
<br><dt><code>histappend</code><dd>If set, the history list is appended to the file named by the value
|
|
of the <samp><span class="env">HISTFILE</span></samp>
|
|
variable when the shell exits, rather than overwriting the file.
|
|
|
|
<br><dt><code>histreedit</code><dd>If set, and Readline
|
|
is being used, a user is given the opportunity to re-edit a
|
|
failed history substitution.
|
|
|
|
<br><dt><code>histverify</code><dd>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.
|
|
|
|
<br><dt><code>hostcomplete</code><dd>If set, and Readline is being used, Bash will attempt to perform
|
|
hostname completion when a word containing a `<samp><span class="samp">@</span></samp>' is being
|
|
completed (see <a href="#Commands-For-Completion">Commands For Completion</a>). This option is enabled
|
|
by default.
|
|
|
|
<br><dt><code>huponexit</code><dd>If set, Bash will send <code>SIGHUP</code> to all jobs when an interactive
|
|
login shell exits (see <a href="#Signals">Signals</a>).
|
|
|
|
<br><dt><code>interactive_comments</code><dd>Allow a word beginning with `<samp><span class="samp">#</span></samp>'
|
|
to cause that word and all remaining characters on that
|
|
line to be ignored in an interactive shell.
|
|
This option is enabled by default.
|
|
|
|
<br><dt><code>lithist</code><dd>If enabled, and the <code>cmdhist</code>
|
|
option is enabled, multi-line commands are saved to the history with
|
|
embedded newlines rather than using semicolon separators where possible.
|
|
|
|
<br><dt><code>login_shell</code><dd>The shell sets this option if it is started as a login shell
|
|
(see <a href="#Invoking-Bash">Invoking Bash</a>).
|
|
The value may not be changed.
|
|
|
|
<br><dt><code>mailwarn</code><dd>If set, and a file that Bash is checking for mail has been
|
|
accessed since the last time it was checked, the message
|
|
<code>"The mail in </code><var>mailfile</var><code> has been read"</code> is displayed.
|
|
|
|
<br><dt><code>no_empty_cmd_completion</code><dd>If set, and Readline is being used, Bash will not attempt to search
|
|
the <samp><span class="env">PATH</span></samp> for possible completions when completion is attempted
|
|
on an empty line.
|
|
|
|
<br><dt><code>nocaseglob</code><dd>If set, Bash matches filenames in a case-insensitive fashion when
|
|
performing filename expansion.
|
|
|
|
<br><dt><code>nocasematch</code><dd>If set, Bash matches patterns in a case-insensitive fashion when
|
|
performing matching while executing <code>case</code> or <code>[[</code>
|
|
conditional commands.
|
|
|
|
<br><dt><code>nullglob</code><dd>If set, Bash allows filename patterns which match no
|
|
files to expand to a null string, rather than themselves.
|
|
|
|
<br><dt><code>progcomp</code><dd>If set, the programmable completion facilities
|
|
(see <a href="#Programmable-Completion">Programmable Completion</a>) are enabled.
|
|
This option is enabled by default.
|
|
|
|
<br><dt><code>promptvars</code><dd>If set, prompt strings undergo
|
|
parameter expansion, command substitution, arithmetic
|
|
expansion, and quote removal after being expanded
|
|
as described below (see <a href="#Printing-a-Prompt">Printing a Prompt</a>).
|
|
This option is enabled by default.
|
|
|
|
<br><dt><code>restricted_shell</code><dd>The shell sets this option if it is started in restricted mode
|
|
(see <a href="#The-Restricted-Shell">The Restricted Shell</a>).
|
|
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.
|
|
|
|
<br><dt><code>shift_verbose</code><dd>If this is set, the <code>shift</code>
|
|
builtin prints an error message when the shift count exceeds the
|
|
number of positional parameters.
|
|
|
|
<br><dt><code>sourcepath</code><dd>If set, the <code>source</code> builtin uses the value of <samp><span class="env">PATH</span></samp>
|
|
to find the directory containing the file supplied as an argument.
|
|
This option is enabled by default.
|
|
|
|
<br><dt><code>xpg_echo</code><dd>If set, the <code>echo</code> builtin expands backslash-escape sequences
|
|
by default.
|
|
|
|
</dl>
|
|
|
|
<p class="noindent">The return status when listing options is zero if all <var>optnames</var>
|
|
are enabled, non-zero otherwise.
|
|
When setting or unsetting options, the return status is zero unless an
|
|
<var>optname</var> is not a valid shell option.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Special-Builtins"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Modifying-Shell-Behavior">Modifying Shell Behavior</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">4.4 Special Builtins</h3>
|
|
|
|
<p><a name="index-special-builtin-148"></a>
|
|
For historical reasons, the <span class="sc">posix</span> standard has classified
|
|
several builtin commands as <em>special</em>.
|
|
When Bash is executing in <span class="sc">posix</span> mode, the special builtins
|
|
differ from other builtin commands in three respects:
|
|
|
|
<ol type=1 start=1>
|
|
<li>Special builtins are found before shell functions during command lookup.
|
|
|
|
<li>If a special builtin returns an error status, a non-interactive shell exits.
|
|
|
|
<li>Assignment statements preceding the command stay in effect in the shell
|
|
environment after the command completes.
|
|
</ol>
|
|
|
|
<p>When Bash is not executing in <span class="sc">posix</span> mode, these builtins behave no
|
|
differently than the rest of the Bash builtin commands.
|
|
The Bash <span class="sc">posix</span> mode is described in <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>.
|
|
|
|
<p>These are the <span class="sc">posix</span> special builtins:
|
|
<pre class="example"> break : . continue eval exec exit export readonly return set<!-- /@w -->
|
|
shift trap unset<!-- /@w -->
|
|
</pre>
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Variables"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bash-Features">Bash Features</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Builtin-Commands">Shell Builtin Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">5 Shell Variables</h2>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Bourne-Shell-Variables">Bourne Shell Variables</a>: Variables which Bash uses in the same way
|
|
as the Bourne Shell.
|
|
<li><a accesskey="2" href="#Bash-Variables">Bash Variables</a>: List of variables that exist in Bash.
|
|
</ul>
|
|
|
|
<p>This chapter describes the shell variables that Bash uses.
|
|
Bash automatically assigns default values to a number of variables.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bourne-Shell-Variables"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bash-Variables">Bash Variables</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Variables">Shell Variables</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">5.1 Bourne Shell Variables</h3>
|
|
|
|
<p>Bash uses certain shell variables in the same way as the Bourne shell.
|
|
In some cases, Bash assigns a default value to the variable.
|
|
|
|
<dl>
|
|
<dt><code>CDPATH</code><a name="index-CDPATH-149"></a><dd>A colon-separated list of directories used as a search path for
|
|
the <code>cd</code> builtin command.
|
|
|
|
<br><dt><code>HOME</code><a name="index-HOME-150"></a><dd>The current user's home directory; the default for the <code>cd</code> builtin
|
|
command.
|
|
The value of this variable is also used by tilde expansion
|
|
(see <a href="#Tilde-Expansion">Tilde Expansion</a>).
|
|
|
|
<br><dt><code>IFS</code><a name="index-IFS-151"></a><dd>A list of characters that separate fields; used when the shell splits
|
|
words as part of expansion.
|
|
|
|
<br><dt><code>MAIL</code><a name="index-MAIL-152"></a><dd>If this parameter is set to a filename and the <samp><span class="env">MAILPATH</span></samp> variable
|
|
is not set, Bash informs the user of the arrival of mail in
|
|
the specified file.
|
|
|
|
<br><dt><code>MAILPATH</code><a name="index-MAILPATH-153"></a><dd>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 file name from the message with
|
|
a `<samp><span class="samp">?</span></samp>'.
|
|
When used in the text of the message, <code>$_</code> expands to the name of
|
|
the current mail file.
|
|
|
|
<br><dt><code>OPTARG</code><a name="index-OPTARG-154"></a><dd>The value of the last option argument processed by the <code>getopts</code> builtin.
|
|
|
|
<br><dt><code>OPTIND</code><a name="index-OPTIND-155"></a><dd>The index of the last option argument processed by the <code>getopts</code> builtin.
|
|
|
|
<br><dt><code>PATH</code><a name="index-PATH-156"></a><dd>A colon-separated list of directories in which the shell looks for
|
|
commands.
|
|
A zero-length (null) directory name in the value of <code>PATH</code> indicates the
|
|
current directory.
|
|
A null directory name may appear as two adjacent colons, or as an initial
|
|
or trailing colon.
|
|
|
|
<br><dt><code>PS1</code><a name="index-PS1-157"></a><dd>The primary prompt string. The default value is `<samp><span class="samp">\s-\v\$ </span></samp>'.
|
|
See <a href="#Printing-a-Prompt">Printing a Prompt</a>, for the complete list of escape
|
|
sequences that are expanded before <samp><span class="env">PS1</span></samp> is displayed.
|
|
|
|
<br><dt><code>PS2</code><a name="index-PS2-158"></a><dd>The secondary prompt string. The default value is `<samp><span class="samp">> </span></samp>'.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-Variables"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Bourne-Shell-Variables">Bourne Shell Variables</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Shell-Variables">Shell Variables</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">5.2 Bash Variables</h3>
|
|
|
|
<p>These variables are set or used by Bash, but other shells
|
|
do not normally treat them specially.
|
|
|
|
<p>A few variables used by Bash are described in different chapters:
|
|
variables for controlling the job control facilities
|
|
(see <a href="#Job-Control-Variables">Job Control Variables</a>).
|
|
|
|
<dl>
|
|
<dt><code>BASH</code><a name="index-BASH-159"></a><dd>The full pathname used to execute the current instance of Bash.
|
|
|
|
<br><dt><code>BASHPID</code><a name="index-BASHPID-160"></a><dd>Expands to the process id of the current Bash process.
|
|
This differs from <code>$$</code> under certain circumstances, such as subshells
|
|
that do not require Bash to be re-initialized.
|
|
|
|
<br><dt><code>BASH_ARGC</code><a name="index-BASH_005fARGC-161"></a><dd>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 <code>.</code> or <code>source</code>) is at the top of the stack. When a
|
|
subroutine is executed, the number of parameters passed is pushed onto
|
|
<code>BASH_ARGC</code>.
|
|
The shell sets <code>BASH_ARGC</code> only when in extended debugging mode
|
|
(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>
|
|
for a description of the <code>extdebug</code> option to the <code>shopt</code>
|
|
builtin).
|
|
|
|
<br><dt><code>BASH_ARGV</code><a name="index-BASH_005fARGV-162"></a><dd>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 <code>BASH_ARGV</code>.
|
|
The shell sets <code>BASH_ARGV</code> only when in extended debugging mode
|
|
(see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>
|
|
for a description of the <code>extdebug</code> option to the <code>shopt</code>
|
|
builtin).
|
|
|
|
<br><dt><code>BASH_COMMAND</code><a name="index-BASH_005fCOMMAND-163"></a><dd>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.
|
|
|
|
<br><dt><code>BASH_ENV</code><a name="index-BASH_005fENV-164"></a><dd>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. See <a href="#Bash-Startup-Files">Bash Startup Files</a>.
|
|
|
|
<br><dt><code>BASH_EXECUTION_STRING</code><a name="index-BASH_005fEXECUTION_005fSTRING-165"></a><dd>The command argument to the <samp><span class="option">-c</span></samp> invocation option.
|
|
|
|
<br><dt><code>BASH_LINENO</code><a name="index-BASH_005fLINENO-166"></a><dd>An array variable whose members are the line numbers in source files
|
|
corresponding to each member of <var>FUNCNAME</var>.
|
|
<code>${BASH_LINENO[$i]}</code> is the line number in the source file where
|
|
<code>${FUNCNAME[$i]}</code> was called.
|
|
The corresponding source file name is <code>${BASH_SOURCE[$i]}</code>.
|
|
Use <code>LINENO</code> to obtain the current line number.
|
|
|
|
<br><dt><code>BASH_REMATCH</code><a name="index-BASH_005fREMATCH-167"></a><dd>An array variable whose members are assigned by the `<samp><span class="samp">=~</span></samp>' binary
|
|
operator to the <code>[[</code> conditional command
|
|
(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
The element with index 0 is the portion of the string
|
|
matching the entire regular expression.
|
|
The element with index <var>n</var> is the portion of the
|
|
string matching the <var>n</var>th parenthesized subexpression.
|
|
This variable is read-only.
|
|
|
|
<br><dt><code>BASH_SOURCE</code><a name="index-BASH_005fSOURCE-168"></a><dd>An array variable whose members are the source filenames corresponding
|
|
to the elements in the <code>FUNCNAME</code> array variable.
|
|
|
|
<br><dt><code>BASH_SUBSHELL</code><a name="index-BASH_005fSUBSHELL-169"></a><dd>Incremented by one each time a subshell or subshell environment is spawned.
|
|
The initial value is 0.
|
|
|
|
<br><dt><code>BASH_VERSINFO</code><a name="index-BASH_005fVERSINFO-170"></a><dd>A readonly array variable (see <a href="#Arrays">Arrays</a>)
|
|
whose members hold version information for this instance of Bash.
|
|
The values assigned to the array members are as follows:
|
|
|
|
<dl>
|
|
<dt><code>BASH_VERSINFO[0]</code><dd>The major version number (the <var>release</var>).
|
|
|
|
<br><dt><code>BASH_VERSINFO[1]</code><dd>The minor version number (the <var>version</var>).
|
|
|
|
<br><dt><code>BASH_VERSINFO[2]</code><dd>The patch level.
|
|
|
|
<br><dt><code>BASH_VERSINFO[3]</code><dd>The build version.
|
|
|
|
<br><dt><code>BASH_VERSINFO[4]</code><dd>The release status (e.g., <var>beta1</var>).
|
|
|
|
<br><dt><code>BASH_VERSINFO[5]</code><dd>The value of <samp><span class="env">MACHTYPE</span></samp>.
|
|
|
|
</dl>
|
|
|
|
<br><dt><code>BASH_VERSION</code><a name="index-BASH_005fVERSION-171"></a><dd>The version number of the current instance of Bash.
|
|
|
|
<br><dt><code>COLUMNS</code><a name="index-COLUMNS-172"></a><dd>Used by the <code>select</code> builtin command to determine the terminal width
|
|
when printing selection lists. Automatically set upon receipt of a
|
|
<code>SIGWINCH</code>.
|
|
|
|
<br><dt><code>COMP_CWORD</code><a name="index-COMP_005fCWORD-173"></a><dd>An index into <samp><span class="env">${COMP_WORDS}</span></samp> of the word containing the current
|
|
cursor position.
|
|
This variable is available only in shell functions invoked by the
|
|
programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
|
|
<br><dt><code>COMP_LINE</code><a name="index-COMP_005fLINE-174"></a><dd>The current command line.
|
|
This variable is available only in shell functions and external
|
|
commands invoked by the
|
|
programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
|
|
<br><dt><code>COMP_POINT</code><a name="index-COMP_005fPOINT-175"></a><dd>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 <code>${#COMP_LINE}</code>.
|
|
This variable is available only in shell functions and external
|
|
commands invoked by the
|
|
programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
|
|
<br><dt><code>COMP_TYPE</code><a name="index-COMP_005fTYPE-176"></a><dd>Set to an integer value corresponding to the type of completion attempted
|
|
that caused a completion function to be called:
|
|
<var>TAB</var>, for normal completion,
|
|
`<samp><span class="samp">?</span></samp>', for listing completions after successive tabs,
|
|
`<samp><span class="samp">!</span></samp>', for listing alternatives on partial word completion,
|
|
`<samp><span class="samp">@</span></samp>', to list completions if the word is not unmodified,
|
|
or
|
|
`<samp><span class="samp">%</span></samp>', for menu completion.
|
|
This variable is available only in shell functions and external
|
|
commands invoked by the
|
|
programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
|
|
<br><dt><code>COMP_KEY</code><a name="index-COMP_005fKEY-177"></a><dd>The key (or final key of a key sequence) used to invoke the current
|
|
completion function.
|
|
|
|
<br><dt><code>COMP_WORDBREAKS</code><a name="index-COMP_005fWORDBREAKS-178"></a><dd>The set of characters that the Readline library treats as word
|
|
separators when performing word completion.
|
|
If <code>COMP_WORDBREAKS</code> is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
|
|
<br><dt><code>COMP_WORDS</code><a name="index-COMP_005fWORDS-179"></a><dd>An array variable consisting of the individual
|
|
words in the current command line.
|
|
The words are split on shell metacharacters as the shell parser would
|
|
separate them.
|
|
This variable is available only in shell functions invoked by the
|
|
programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
|
|
<br><dt><code>COMPREPLY</code><a name="index-COMPREPLY-180"></a><dd>An array variable from which Bash reads the possible completions
|
|
generated by a shell function invoked by the programmable completion
|
|
facility (see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
|
|
<br><dt><code>DIRSTACK</code><a name="index-DIRSTACK-181"></a><dd>An array variable containing the current contents of the directory stack.
|
|
Directories appear in the stack in the order they are displayed by the
|
|
<code>dirs</code> builtin.
|
|
Assigning to members of this array variable may be used to modify
|
|
directories already in the stack, but the <code>pushd</code> and <code>popd</code>
|
|
builtins must be used to add and remove directories.
|
|
Assignment to this variable will not change the current directory.
|
|
If <samp><span class="env">DIRSTACK</span></samp> is unset, it loses its special properties, even if
|
|
it is subsequently reset.
|
|
|
|
<br><dt><code>EMACS</code><a name="index-EMACS-182"></a><dd>If Bash finds this variable in the environment when the shell
|
|
starts with value `<samp><span class="samp">t</span></samp>', it assumes that the shell is running in an
|
|
emacs shell buffer and disables line editing.
|
|
|
|
<br><dt><code>EUID</code><a name="index-EUID-183"></a><dd>The numeric effective user id of the current user. This variable
|
|
is readonly.
|
|
|
|
<br><dt><code>FCEDIT</code><a name="index-FCEDIT-184"></a><dd>The editor used as a default by the <samp><span class="option">-e</span></samp> option to the <code>fc</code>
|
|
builtin command.
|
|
|
|
<br><dt><code>FIGNORE</code><a name="index-FIGNORE-185"></a><dd>A colon-separated list of suffixes to ignore when performing
|
|
filename completion.
|
|
A file name whose suffix matches one of the entries in
|
|
<samp><span class="env">FIGNORE</span></samp>
|
|
is excluded from the list of matched file names. A sample
|
|
value is `<samp><span class="samp">.o:~</span></samp>'
|
|
|
|
<br><dt><code>FUNCNAME</code><a name="index-FUNCNAME-186"></a><dd>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 is <code>"main"</code>.
|
|
This variable exists only when a shell function is executing.
|
|
Assignments to <samp><span class="env">FUNCNAME</span></samp> have no effect and return an error status.
|
|
If <samp><span class="env">FUNCNAME</span></samp> is unset, it loses its special properties, even if
|
|
it is subsequently reset.
|
|
|
|
<br><dt><code>GLOBIGNORE</code><a name="index-GLOBIGNORE-187"></a><dd>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 <samp><span class="env">GLOBIGNORE</span></samp>, it is removed from the list
|
|
of matches.
|
|
|
|
<br><dt><code>GROUPS</code><a name="index-GROUPS-188"></a><dd>An array variable containing the list of groups of which the current
|
|
user is a member.
|
|
Assignments to <samp><span class="env">GROUPS</span></samp> have no effect and return an error status.
|
|
If <samp><span class="env">GROUPS</span></samp> is unset, it loses its special properties, even if it is
|
|
subsequently reset.
|
|
|
|
<br><dt><code>histchars</code><a name="index-histchars-189"></a><dd>Up to three characters which control history expansion, quick
|
|
substitution, and tokenization (see <a href="#History-Interaction">History Interaction</a>).
|
|
The first character is the
|
|
<var>history expansion</var> character, that is, the character which signifies the
|
|
start of a history expansion, normally `<samp><span class="samp">!</span></samp>'. The second character is the
|
|
character which signifies `quick substitution' when seen as the first
|
|
character on a line, normally `<samp><span class="samp">^</span></samp>'. 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 `<samp><span class="samp">#</span></samp>'. 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.
|
|
|
|
<br><dt><code>HISTCMD</code><a name="index-HISTCMD-190"></a><dd>The history number, or index in the history list, of the current
|
|
command. If <samp><span class="env">HISTCMD</span></samp> is unset, it loses its special properties,
|
|
even if it is subsequently reset.
|
|
|
|
<br><dt><code>HISTCONTROL</code><a name="index-HISTCONTROL-191"></a><dd>A colon-separated list of values controlling how commands are saved on
|
|
the history list.
|
|
If the list of values includes `<samp><span class="samp">ignorespace</span></samp>', lines which begin
|
|
with a space character are not saved in the history list.
|
|
A value of `<samp><span class="samp">ignoredups</span></samp>' causes lines which match the previous
|
|
history entry to not be saved.
|
|
A value of `<samp><span class="samp">ignoreboth</span></samp>' is shorthand for
|
|
`<samp><span class="samp">ignorespace</span></samp>' and `<samp><span class="samp">ignoredups</span></samp>'.
|
|
A value of `<samp><span class="samp">erasedups</span></samp>' 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 <samp><span class="env">HISTCONTROL</span></samp> 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 <samp><span class="env">HISTIGNORE</span></samp>.
|
|
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
|
|
<samp><span class="env">HISTCONTROL</span></samp>.
|
|
|
|
<br><dt><code>HISTFILE</code><a name="index-HISTFILE-192"></a><dd>The name of the file to which the command history is saved. The
|
|
default value is <samp><span class="file">~/.bash_history</span></samp>.
|
|
|
|
<br><dt><code>HISTFILESIZE</code><a name="index-HISTFILESIZE-193"></a><dd>The maximum number of lines contained in the history file. When this
|
|
variable is assigned a value, the history file is truncated, if
|
|
necessary, by removing the oldest entries,
|
|
to contain no more than that number of lines.
|
|
The history file is also truncated to this size after
|
|
writing it when an interactive shell exits.
|
|
The default value is 500.
|
|
|
|
<br><dt><code>HISTIGNORE</code><a name="index-HISTIGNORE-194"></a><dd>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 `<samp><span class="samp">*</span></samp>' is appended). Each pattern is tested
|
|
against the line after the checks specified by <samp><span class="env">HISTCONTROL</span></samp>
|
|
are applied. In addition to the normal shell pattern matching
|
|
characters, `<samp><span class="samp">&</span></samp>' matches the previous history line. `<samp><span class="samp">&</span></samp>'
|
|
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
|
|
<samp><span class="env">HISTIGNORE</span></samp>.
|
|
|
|
<p><samp><span class="env">HISTIGNORE</span></samp> subsumes the function of <samp><span class="env">HISTCONTROL</span></samp>. A
|
|
pattern of `<samp><span class="samp">&</span></samp>' is identical to <code>ignoredups</code>, and a
|
|
pattern of `<samp><span class="samp">[ ]*</span></samp>' is identical to <code>ignorespace</code>.
|
|
Combining these two patterns, separating them with a colon,
|
|
provides the functionality of <code>ignoreboth</code>.
|
|
|
|
<br><dt><code>HISTSIZE</code><a name="index-HISTSIZE-195"></a><dd>The maximum number of commands to remember on the history list.
|
|
The default value is 500.
|
|
|
|
<br><dt><code>HISTTIMEFORMAT</code><a name="index-HISTTIMEFORMAT-196"></a><dd>If this variable is set and not null, its value is used as a format string
|
|
for <var>strftime</var> to print the time stamp associated with each history
|
|
entry displayed by the <code>history</code> builtin.
|
|
If this variable is set, time stamps are written to the history file so
|
|
they may be preserved across shell sessions.
|
|
|
|
<br><dt><code>HOSTFILE</code><a name="index-HOSTFILE-197"></a><dd>Contains the name of a file in the same format as <samp><span class="file">/etc/hosts</span></samp> 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 <samp><span class="env">HOSTFILE</span></samp> is set, but has no value, Bash attempts to read
|
|
<samp><span class="file">/etc/hosts</span></samp> to obtain the list of possible hostname completions.
|
|
When <samp><span class="env">HOSTFILE</span></samp> is unset, the hostname list is cleared.
|
|
|
|
<br><dt><code>HOSTNAME</code><a name="index-HOSTNAME-198"></a><dd>The name of the current host.
|
|
|
|
<br><dt><code>HOSTTYPE</code><a name="index-HOSTTYPE-199"></a><dd>A string describing the machine Bash is running on.
|
|
|
|
<br><dt><code>IGNOREEOF</code><a name="index-IGNOREEOF-200"></a><dd>Controls the action of the shell on receipt of an <code>EOF</code> character
|
|
as the sole input. If set, the value denotes the number
|
|
of consecutive <code>EOF</code> 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 <code>EOF</code> signifies the end of
|
|
input to the shell. This is only in effect for interactive shells.
|
|
|
|
<br><dt><code>INPUTRC</code><a name="index-INPUTRC-201"></a><dd>The name of the Readline initialization file, overriding the default
|
|
of <samp><span class="file">~/.inputrc</span></samp>.
|
|
|
|
<br><dt><code>LANG</code><a name="index-LANG-202"></a><dd>Used to determine the locale category for any category not specifically
|
|
selected with a variable starting with <code>LC_</code>.
|
|
|
|
<br><dt><code>LC_ALL</code><a name="index-LC_005fALL-203"></a><dd>This variable overrides the value of <samp><span class="env">LANG</span></samp> and any other
|
|
<code>LC_</code> variable specifying a locale category.
|
|
|
|
<br><dt><code>LC_COLLATE</code><a name="index-LC_005fCOLLATE-204"></a><dd>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
|
|
(see <a href="#Filename-Expansion">Filename Expansion</a>).
|
|
|
|
<br><dt><code>LC_CTYPE</code><a name="index-LC_005fCTYPE-205"></a><dd>This variable determines the interpretation of characters and the
|
|
behavior of character classes within filename expansion and pattern
|
|
matching (see <a href="#Filename-Expansion">Filename Expansion</a>).
|
|
|
|
<br><dt><code>LC_MESSAGES</code><a name="index-LC_005fMESSAGES-206"></a><dd>This variable determines the locale used to translate double-quoted
|
|
strings preceded by a `<samp><span class="samp">$</span></samp>' (see <a href="#Locale-Translation">Locale Translation</a>).
|
|
|
|
<br><dt><code>LC_NUMERIC</code><a name="index-LC_005fNUMERIC-207"></a><dd>This variable determines the locale category used for number formatting.
|
|
|
|
<br><dt><code>LINENO</code><a name="index-LINENO-208"></a><dd>The line number in the script or shell function currently executing.
|
|
|
|
<br><dt><code>LINES</code><a name="index-LINES-209"></a><dd>Used by the <code>select</code> builtin command to determine the column length
|
|
for printing selection lists. Automatically set upon receipt of a
|
|
<code>SIGWINCH</code>.
|
|
|
|
<br><dt><code>MACHTYPE</code><a name="index-MACHTYPE-210"></a><dd>A string that fully describes the system type on which Bash
|
|
is executing, in the standard <span class="sc">gnu</span> <var>cpu-company-system</var> format.
|
|
|
|
<br><dt><code>MAILCHECK</code><a name="index-MAILCHECK-211"></a><dd>How often (in seconds) that the shell should check for mail in the
|
|
files specified in the <samp><span class="env">MAILPATH</span></samp> or <samp><span class="env">MAIL</span></samp> 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.
|
|
|
|
<br><dt><code>OLDPWD</code><a name="index-OLDPWD-212"></a><dd>The previous working directory as set by the <code>cd</code> builtin.
|
|
|
|
<br><dt><code>OPTERR</code><a name="index-OPTERR-213"></a><dd>If set to the value 1, Bash displays error messages
|
|
generated by the <code>getopts</code> builtin command.
|
|
|
|
<br><dt><code>OSTYPE</code><a name="index-OSTYPE-214"></a><dd>A string describing the operating system Bash is running on.
|
|
|
|
<br><dt><code>PIPESTATUS</code><a name="index-PIPESTATUS-215"></a><dd>An array variable (see <a href="#Arrays">Arrays</a>)
|
|
containing a list of exit status values from the processes
|
|
in the most-recently-executed foreground pipeline (which may
|
|
contain only a single command).
|
|
|
|
<br><dt><code>POSIXLY_CORRECT</code><a name="index-POSIXLY_005fCORRECT-216"></a><dd>If this variable is in the environment when <code>bash</code> starts, the shell
|
|
enters <span class="sc">posix</span> mode (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>) before reading the
|
|
startup files, as if the <samp><span class="option">--posix</span></samp> invocation option had been supplied.
|
|
If it is set while the shell is running, <code>bash</code> enables <span class="sc">posix</span> mode,
|
|
as if the command
|
|
<pre class="example"> <code>set -o posix</code>
|
|
</pre>
|
|
<p class="noindent">had been executed.
|
|
|
|
<br><dt><code>PPID</code><a name="index-PPID-217"></a><dd>The process <span class="sc">id</span> of the shell's parent process. This variable
|
|
is readonly.
|
|
|
|
<br><dt><code>PROMPT_COMMAND</code><a name="index-PROMPT_005fCOMMAND-218"></a><dd>If set, the value is interpreted as a command to execute
|
|
before the printing of each primary prompt (<samp><span class="env">$PS1</span></samp>).
|
|
|
|
<br><dt><code>PS3</code><a name="index-PS3-219"></a><dd>The value of this variable is used as the prompt for the
|
|
<code>select</code> command. If this variable is not set, the
|
|
<code>select</code> command prompts with `<samp><span class="samp">#? </span></samp>'
|
|
|
|
<br><dt><code>PS4</code><a name="index-PS4-220"></a><dd>The value is the prompt printed before the command line is echoed
|
|
when the <samp><span class="option">-x</span></samp> option is set (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
The first character of <samp><span class="env">PS4</span></samp> is replicated multiple times, as
|
|
necessary, to indicate multiple levels of indirection.
|
|
The default is `<samp><span class="samp">+ </span></samp>'.
|
|
|
|
<br><dt><code>PWD</code><a name="index-PWD-221"></a><dd>The current working directory as set by the <code>cd</code> builtin.
|
|
|
|
<br><dt><code>RANDOM</code><a name="index-RANDOM-222"></a><dd>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.
|
|
|
|
<br><dt><code>REPLY</code><a name="index-REPLY-223"></a><dd>The default variable for the <code>read</code> builtin.
|
|
|
|
<br><dt><code>SECONDS</code><a name="index-SECONDS-224"></a><dd>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.
|
|
|
|
<br><dt><code>SHELL</code><a name="index-SHELL-225"></a><dd>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.
|
|
|
|
<br><dt><code>SHELLOPTS</code><a name="index-SHELLOPTS-226"></a><dd>A colon-separated list of enabled shell options. Each word in
|
|
the list is a valid argument for the <samp><span class="option">-o</span></samp> option to the
|
|
<code>set</code> builtin command (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
The options appearing in <samp><span class="env">SHELLOPTS</span></samp> are those reported
|
|
as `<samp><span class="samp">on</span></samp>' by `<samp><span class="samp">set -o</span></samp>'.
|
|
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.
|
|
|
|
<br><dt><code>SHLVL</code><a name="index-SHLVL-227"></a><dd>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.
|
|
|
|
<br><dt><code>TIMEFORMAT</code><a name="index-TIMEFORMAT-228"></a><dd>The value of this parameter is used as a format string specifying
|
|
how the timing information for pipelines prefixed with the <code>time</code>
|
|
reserved word should be displayed.
|
|
The `<samp><span class="samp">%</span></samp>' 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.
|
|
|
|
<dl>
|
|
<dt><code>%%</code><dd>A literal `<samp><span class="samp">%</span></samp>'.
|
|
|
|
<br><dt><code>%[</code><var>p</var><code>][l]R</code><dd>The elapsed time in seconds.
|
|
|
|
<br><dt><code>%[</code><var>p</var><code>][l]U</code><dd>The number of CPU seconds spent in user mode.
|
|
|
|
<br><dt><code>%[</code><var>p</var><code>][l]S</code><dd>The number of CPU seconds spent in system mode.
|
|
|
|
<br><dt><code>%P</code><dd>The CPU percentage, computed as (%U + %S) / %R.
|
|
</dl>
|
|
|
|
<p>The optional <var>p</var> 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 <var>p</var> greater than 3 are changed to 3.
|
|
If <var>p</var> is not specified, the value 3 is used.
|
|
|
|
<p>The optional <code>l</code> specifies a longer format, including minutes, of
|
|
the form <var>MM</var>m<var>SS</var>.<var>FF</var>s.
|
|
The value of <var>p</var> determines whether or not the fraction is included.
|
|
|
|
<p>If this variable is not set, Bash acts as if it had the value
|
|
<pre class="example"> <code>$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'</code>
|
|
</pre>
|
|
<p>If the value is null, no timing information is displayed.
|
|
A trailing newline is added when the format string is displayed.
|
|
|
|
<br><dt><code>TMOUT</code><a name="index-TMOUT-229"></a><dd>If set to a value greater than zero, <code>TMOUT</code> is treated as the
|
|
default timeout for the <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
The <code>select</code> command (see <a href="#Conditional-Constructs">Conditional Constructs</a>) terminates
|
|
if input does not arrive after <code>TMOUT</code> seconds when input is coming
|
|
from a terminal.
|
|
|
|
<p>In an interactive shell, the value is interpreted as
|
|
the number of seconds to wait for input after issuing the primary
|
|
prompt when the shell is interactive.
|
|
Bash terminates after that number of seconds if input does
|
|
not arrive.
|
|
|
|
<br><dt><code>TMPDIR</code><a name="index-TMPDIR-230"></a><dd>If set, Bash uses its value as the name of a directory in which
|
|
Bash creates temporary files for the shell's use.
|
|
|
|
<br><dt><code>UID</code><a name="index-UID-231"></a><dd>The numeric real user id of the current user. This variable is readonly.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-Features"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Job-Control">Job Control</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Variables">Shell Variables</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">6 Bash Features</h2>
|
|
|
|
<p>This section describes features unique to Bash.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Invoking-Bash">Invoking Bash</a>: Command line options that you can give
|
|
to Bash.
|
|
<li><a accesskey="2" href="#Bash-Startup-Files">Bash Startup Files</a>: When and how Bash executes scripts.
|
|
<li><a accesskey="3" href="#Interactive-Shells">Interactive Shells</a>: What an interactive shell is.
|
|
<li><a accesskey="4" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>: Primitives used in composing expressions for
|
|
the <code>test</code> builtin.
|
|
<li><a accesskey="5" href="#Shell-Arithmetic">Shell Arithmetic</a>: Arithmetic on shell variables.
|
|
<li><a accesskey="6" href="#Aliases">Aliases</a>: Substituting one command for another.
|
|
<li><a accesskey="7" href="#Arrays">Arrays</a>: Array Variables.
|
|
<li><a accesskey="8" href="#The-Directory-Stack">The Directory Stack</a>: History of visited directories.
|
|
<li><a accesskey="9" href="#Printing-a-Prompt">Printing a Prompt</a>: Controlling the PS1 string.
|
|
<li><a href="#The-Restricted-Shell">The Restricted Shell</a>: A more controlled mode of shell execution.
|
|
<li><a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>: Making Bash behave more closely to what
|
|
the POSIX standard specifies.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Invoking-Bash"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bash-Startup-Files">Bash Startup Files</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.1 Invoking Bash</h3>
|
|
|
|
<pre class="example"> bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o <var>option</var>] [-O <var>shopt_option</var>] [<var>argument</var> ...]
|
|
bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o <var>option</var>] [-O <var>shopt_option</var>] -c <var>string</var> [<var>argument</var> ...]
|
|
bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o <var>option</var>] [-O <var>shopt_option</var>] [<var>argument</var> ...]
|
|
</pre>
|
|
<p>In addition to the single-character shell command-line options
|
|
(see <a href="#The-Set-Builtin">The Set Builtin</a>), 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.
|
|
|
|
<dl>
|
|
<dt><code>--debugger</code><dd>Arrange for the debugger profile to be executed before the shell
|
|
starts. Turns on extended debugging mode (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>
|
|
for a description of the <code>extdebug</code> option to the <code>shopt</code>
|
|
builtin) and shell function tracing
|
|
(see <a href="#The-Set-Builtin">The Set Builtin</a> for a description of the <code>-o functrace</code>
|
|
option).
|
|
|
|
<br><dt><code>--dump-po-strings</code><dd>A list of all double-quoted strings preceded by `<samp><span class="samp">$</span></samp>'
|
|
is printed on the standard output
|
|
in the <span class="sc">gnu</span> <code>gettext</code> PO (portable object) file format.
|
|
Equivalent to <samp><span class="option">-D</span></samp> except for the output format.
|
|
|
|
<br><dt><code>--dump-strings</code><dd>Equivalent to <samp><span class="option">-D</span></samp>.
|
|
|
|
<br><dt><code>--help</code><dd>Display a usage message on standard output and exit successfully.
|
|
|
|
<br><dt><code>--init-file </code><var>filename</var><dt><code>--rcfile </code><var>filename</var><dd>Execute commands from <var>filename</var> (instead of <samp><span class="file">~/.bashrc</span></samp>)
|
|
in an interactive shell.
|
|
|
|
<br><dt><code>--login</code><dd>Equivalent to <samp><span class="option">-l</span></samp>.
|
|
|
|
<br><dt><code>--noediting</code><dd>Do not use the <span class="sc">gnu</span> Readline library (see <a href="#Command-Line-Editing">Command Line Editing</a>)
|
|
to read command lines when the shell is interactive.
|
|
|
|
<br><dt><code>--noprofile</code><dd>Don't load the system-wide startup file <samp><span class="file">/etc/profile</span></samp>
|
|
or any of the personal initialization files
|
|
<samp><span class="file">~/.bash_profile</span></samp>, <samp><span class="file">~/.bash_login</span></samp>, or <samp><span class="file">~/.profile</span></samp>
|
|
when Bash is invoked as a login shell.
|
|
|
|
<br><dt><code>--norc</code><dd>Don't read the <samp><span class="file">~/.bashrc</span></samp> initialization file in an
|
|
interactive shell. This is on by default if the shell is
|
|
invoked as <code>sh</code>.
|
|
|
|
<br><dt><code>--posix</code><dd>Change the behavior of Bash where the default operation differs
|
|
from the <span class="sc">posix</span> standard to match the standard. This
|
|
is intended to make Bash behave as a strict superset of that
|
|
standard. See <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>, for a description of the Bash
|
|
<span class="sc">posix</span> mode.
|
|
|
|
<br><dt><code>--restricted</code><dd>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>).
|
|
|
|
<br><dt><code>--verbose</code><dd>Equivalent to <samp><span class="option">-v</span></samp>. Print shell input lines as they're read.
|
|
|
|
<br><dt><code>--version</code><dd>Show version information for this instance of
|
|
Bash on the standard output and exit successfully.
|
|
|
|
</dl>
|
|
|
|
<p>There are several single-character options that may be supplied at
|
|
invocation which are not available with the <code>set</code> builtin.
|
|
|
|
<dl>
|
|
<dt><code>-c </code><var>string</var><dd>Read and execute commands from <var>string</var> after processing the
|
|
options, then exit. Any remaining arguments are assigned to the
|
|
positional parameters, starting with <code>$0</code>.
|
|
|
|
<br><dt><code>-i</code><dd>Force the shell to run interactively. Interactive shells are
|
|
described in <a href="#Interactive-Shells">Interactive Shells</a>.
|
|
|
|
<br><dt><code>-l</code><dd>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 `<samp><span class="samp">exec -l bash</span></samp>'.
|
|
When the shell is not interactive, the login shell startup files will
|
|
be executed.
|
|
`<samp><span class="samp">exec bash -l</span></samp>' or `<samp><span class="samp">exec bash --login</span></samp>'
|
|
will replace the current shell with a Bash login shell.
|
|
See <a href="#Bash-Startup-Files">Bash Startup Files</a>, for a description of the special behavior
|
|
of a login shell.
|
|
|
|
<br><dt><code>-r</code><dd>Make the shell a restricted shell (see <a href="#The-Restricted-Shell">The Restricted Shell</a>).
|
|
|
|
<br><dt><code>-s</code><dd>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.
|
|
|
|
<br><dt><code>-D</code><dd>A list of all double-quoted strings preceded by `<samp><span class="samp">$</span></samp>'
|
|
is printed on the standard output.
|
|
These are the strings that
|
|
are subject to language translation when the current locale
|
|
is not <code>C</code> or <code>POSIX</code> (see <a href="#Locale-Translation">Locale Translation</a>).
|
|
This implies the <samp><span class="option">-n</span></samp> option; no commands will be executed.
|
|
|
|
<br><dt><code>[-+]O [</code><var>shopt_option</var><code>]</code><dd><var>shopt_option</var> is one of the shell options accepted by the
|
|
<code>shopt</code> builtin (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
If <var>shopt_option</var> is present, <samp><span class="option">-O</span></samp> sets the value of that option;
|
|
<samp><span class="option">+O</span></samp> unsets it.
|
|
If <var>shopt_option</var> is not supplied, the names and values of the shell
|
|
options accepted by <code>shopt</code> are printed on the standard output.
|
|
If the invocation option is <samp><span class="option">+O</span></samp>, the output is displayed in a format
|
|
that may be reused as input.
|
|
|
|
<br><dt><code>--</code><dd>A <code>--</code> signals the end of options and disables further option
|
|
processing.
|
|
Any arguments after the <code>--</code> are treated as filenames and arguments.
|
|
|
|
</dl>
|
|
|
|
<p><a name="index-login-shell-232"></a>A <em>login</em> shell is one whose first character of argument zero is
|
|
`<samp><span class="samp">-</span></samp>', or one invoked with the <samp><span class="option">--login</span></samp> option.
|
|
|
|
<p><a name="index-interactive-shell-233"></a>An <em>interactive</em> shell is one started without non-option arguments,
|
|
unless <samp><span class="option">-s</span></samp> is specified,
|
|
without specifying the <samp><span class="option">-c</span></samp> option, and whose input and output are both
|
|
connected to terminals (as determined by <code>isatty(3)</code>), or one
|
|
started with the <samp><span class="option">-i</span></samp> option. See <a href="#Interactive-Shells">Interactive Shells</a>, for more
|
|
information.
|
|
|
|
<p>If arguments remain after option processing, and neither the
|
|
<samp><span class="option">-c</span></samp> nor the <samp><span class="option">-s</span></samp>
|
|
option has been supplied, the first argument is assumed to
|
|
be the name of a file containing shell commands (see <a href="#Shell-Scripts">Shell Scripts</a>).
|
|
When Bash is invoked in this fashion, <code>$0</code>
|
|
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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-Startup-Files"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Interactive-Shells">Interactive Shells</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Invoking-Bash">Invoking Bash</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.2 Bash Startup Files</h3>
|
|
|
|
<p><a name="index-startup-files-234"></a>
|
|
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 file names as described above under
|
|
Tilde Expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>).
|
|
|
|
<p>Interactive shells are described in <a href="#Interactive-Shells">Interactive Shells</a>.
|
|
|
|
<h5 class="subsubheading">Invoked as an interactive login shell, or with <samp><span class="option">--login</span></samp></h5>
|
|
|
|
<p>When Bash is invoked as an interactive login shell, or as a
|
|
non-interactive shell with the <samp><span class="option">--login</span></samp> option, it first reads and
|
|
executes commands from the file <samp><span class="file">/etc/profile</span></samp>, if that file exists.
|
|
After reading that file, it looks for <samp><span class="file">~/.bash_profile</span></samp>,
|
|
<samp><span class="file">~/.bash_login</span></samp>, and <samp><span class="file">~/.profile</span></samp>, in that order, and reads
|
|
and executes commands from the first one that exists and is readable.
|
|
The <samp><span class="option">--noprofile</span></samp> option may be used when the shell is started to
|
|
inhibit this behavior.
|
|
|
|
<p>When a login shell exits, Bash reads and executes commands from
|
|
the file <samp><span class="file">~/.bash_logout</span></samp>, if it exists.
|
|
|
|
<h5 class="subsubheading">Invoked as an interactive non-login shell</h5>
|
|
|
|
<p>When an interactive shell that is not a login shell is started, Bash
|
|
reads and executes commands from <samp><span class="file">~/.bashrc</span></samp>, if that file exists.
|
|
This may be inhibited by using the <samp><span class="option">--norc</span></samp> option.
|
|
The <samp><span class="option">--rcfile </span><var>file</var></samp> option will force Bash to read and
|
|
execute commands from <var>file</var> instead of <samp><span class="file">~/.bashrc</span></samp>.
|
|
|
|
<p>So, typically, your <samp><span class="file">~/.bash_profile</span></samp> contains the line
|
|
<pre class="example"> <code>if [ -f ~/.bashrc ]; then . ~/.bashrc; fi</code>
|
|
</pre>
|
|
<p class="noindent">after (or before) any login-specific initializations.
|
|
|
|
<h5 class="subsubheading">Invoked non-interactively</h5>
|
|
|
|
<p>When Bash is started non-interactively, to run a shell script,
|
|
for example, it looks for the variable <samp><span class="env">BASH_ENV</span></samp> 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:
|
|
<pre class="example"> <code>if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi</code>
|
|
</pre>
|
|
<p class="noindent">but the value of the <samp><span class="env">PATH</span></samp> variable is not used to search for the
|
|
file name.
|
|
|
|
<p>As noted above, if a non-interactive shell is invoked with the
|
|
<samp><span class="option">--login</span></samp> option, Bash attempts to read and execute commands from the
|
|
login shell startup files.
|
|
|
|
<h5 class="subsubheading">Invoked with name <code>sh</code></h5>
|
|
|
|
<p>If Bash is invoked with the name <code>sh</code>, it tries to mimic the
|
|
startup behavior of historical versions of <code>sh</code> as closely as
|
|
possible, while conforming to the <span class="sc">posix</span> standard as well.
|
|
|
|
<p>When invoked as an interactive login shell, or as a non-interactive
|
|
shell with the <samp><span class="option">--login</span></samp> option, it first attempts to read
|
|
and execute commands from <samp><span class="file">/etc/profile</span></samp> and <samp><span class="file">~/.profile</span></samp>, in
|
|
that order.
|
|
The <samp><span class="option">--noprofile</span></samp> option may be used to inhibit this behavior.
|
|
When invoked as an interactive shell with the name <code>sh</code>, Bash
|
|
looks for the variable <samp><span class="env">ENV</span></samp>, 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 <code>sh</code> does not attempt to read and execute
|
|
commands from any other startup files, the <samp><span class="option">--rcfile</span></samp> option has
|
|
no effect.
|
|
A non-interactive shell invoked with the name <code>sh</code> does not attempt
|
|
to read any other startup files.
|
|
|
|
<p>When invoked as <code>sh</code>, Bash enters <span class="sc">posix</span> mode after
|
|
the startup files are read.
|
|
|
|
<h5 class="subsubheading">Invoked in <span class="sc">posix</span> mode</h5>
|
|
|
|
<p>When Bash is started in <span class="sc">posix</span> mode, as with the
|
|
<samp><span class="option">--posix</span></samp> command line option, it follows the <span class="sc">posix</span> standard
|
|
for startup files.
|
|
In this mode, interactive shells expand the <samp><span class="env">ENV</span></samp> variable
|
|
and commands are read and executed from the file whose name is the
|
|
expanded value.
|
|
No other startup files are read.
|
|
|
|
<h5 class="subsubheading">Invoked by remote shell daemon</h5>
|
|
|
|
<p>Bash attempts to determine when it is being run by the remote shell
|
|
daemon, usually <code>rshd</code>. If Bash determines it is being run by
|
|
rshd, it reads and executes commands from <samp><span class="file">~/.bashrc</span></samp>, if that
|
|
file exists and is readable.
|
|
It will not do this if invoked as <code>sh</code>.
|
|
The <samp><span class="option">--norc</span></samp> option may be used to inhibit this behavior, and the
|
|
<samp><span class="option">--rcfile</span></samp> option may be used to force another file to be read, but
|
|
<code>rshd</code> does not generally invoke the shell with those options or
|
|
allow them to be specified.
|
|
|
|
<h5 class="subsubheading">Invoked with unequal effective and real <span class="sc">uid/gid</span>s</h5>
|
|
|
|
<p>If Bash is started with the effective user (group) id not equal to the
|
|
real user (group) id, and the <code>-p</code> option is not supplied, no startup
|
|
files are read, shell functions are not inherited from the environment,
|
|
the <samp><span class="env">SHELLOPTS</span></samp> variable, if it appears in the environment, is ignored,
|
|
and the effective user id is set to the real user id.
|
|
If the <code>-p</code> option is supplied at invocation, the startup behavior is
|
|
the same, but the effective user id is not reset.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Interactive-Shells"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Bash-Startup-Files">Bash Startup Files</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.3 Interactive Shells</h3>
|
|
|
|
<p><a name="index-interactive-shell-235"></a><a name="index-shell_002c-interactive-236"></a>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#What-is-an-Interactive-Shell_003f">What is an Interactive Shell?</a>: What determines whether a shell is Interactive.
|
|
<li><a accesskey="2" href="#Is-this-Shell-Interactive_003f">Is this Shell Interactive?</a>: How to tell if a shell is interactive.
|
|
<li><a accesskey="3" href="#Interactive-Shell-Behavior">Interactive Shell Behavior</a>: What changes in a interactive shell?
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="What-is-an-Interactive-Shell%3f"></a>
|
|
<a name="What-is-an-Interactive-Shell_003f"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Is-this-Shell-Interactive_003f">Is this Shell Interactive?</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Interactive-Shells">Interactive Shells</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">6.3.1 What is an Interactive Shell?</h4>
|
|
|
|
<p>An interactive shell
|
|
is one started without non-option arguments, unless <samp><span class="option">-s</span></samp> is
|
|
specified, without specifying the <samp><span class="option">-c</span></samp> option, and
|
|
whose input and error output are both
|
|
connected to terminals (as determined by <code>isatty(3)</code>),
|
|
or one started with the <samp><span class="option">-i</span></samp> option.
|
|
|
|
<p>An interactive shell generally reads from and writes to a user's
|
|
terminal.
|
|
|
|
<p>The <samp><span class="option">-s</span></samp> invocation option may be used to set the positional parameters
|
|
when an interactive shell is started.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Is-this-Shell-Interactive%3f"></a>
|
|
<a name="Is-this-Shell-Interactive_003f"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Interactive-Shell-Behavior">Interactive Shell Behavior</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#What-is-an-Interactive-Shell_003f">What is an Interactive Shell?</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Interactive-Shells">Interactive Shells</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">6.3.2 Is this Shell Interactive?</h4>
|
|
|
|
<p>To determine within a startup script whether or not Bash is
|
|
running interactively,
|
|
test the value of the `<samp><span class="samp">-</span></samp>' special parameter.
|
|
It contains <code>i</code> when the shell is interactive. For example:
|
|
|
|
<pre class="example"> case "$-" in
|
|
*i*) echo This shell is interactive ;;
|
|
*) echo This shell is not interactive ;;
|
|
esac
|
|
</pre>
|
|
<p>Alternatively, startup scripts may examine the variable
|
|
<samp><span class="env">PS1</span></samp>; it is unset in non-interactive shells, and set in
|
|
interactive shells. Thus:
|
|
|
|
<pre class="example"> if [ -z "$PS1" ]; then
|
|
echo This shell is not interactive
|
|
else
|
|
echo This shell is interactive
|
|
fi
|
|
</pre>
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Interactive-Shell-Behavior"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Is-this-Shell-Interactive_003f">Is this Shell Interactive?</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Interactive-Shells">Interactive Shells</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">6.3.3 Interactive Shell Behavior</h4>
|
|
|
|
<p>When the shell is running interactively, it changes its behavior in
|
|
several ways.
|
|
|
|
<ol type=1 start=1>
|
|
<li>Startup files are read and executed as described in <a href="#Bash-Startup-Files">Bash Startup Files</a>.
|
|
|
|
<li>Job Control (see <a href="#Job-Control">Job Control</a>) is enabled by default. When job
|
|
control is in effect, Bash ignores the keyboard-generated job control
|
|
signals <code>SIGTTIN</code>, <code>SIGTTOU</code>, and <code>SIGTSTP</code>.
|
|
|
|
<li>Bash expands and displays <samp><span class="env">PS1</span></samp> before reading the first line
|
|
of a command, and expands and displays <samp><span class="env">PS2</span></samp> before reading the
|
|
second and subsequent lines of a multi-line command.
|
|
|
|
<li>Bash executes the value of the <samp><span class="env">PROMPT_COMMAND</span></samp> variable as a command
|
|
before printing the primary prompt, <samp><span class="env">$PS1</span></samp>
|
|
(see <a href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
<li>Readline (see <a href="#Command-Line-Editing">Command Line Editing</a>) is used to read commands from
|
|
the user's terminal.
|
|
|
|
<li>Bash inspects the value of the <code>ignoreeof</code> option to <code>set -o</code>
|
|
instead of exiting immediately when it receives an <code>EOF</code> on its
|
|
standard input when reading a command (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
<li>Command history (see <a href="#Bash-History-Facilities">Bash History Facilities</a>)
|
|
and history expansion (see <a href="#History-Interaction">History Interaction</a>)
|
|
are enabled by default.
|
|
Bash will save the command history to the file named by <samp><span class="env">$HISTFILE</span></samp>
|
|
when an interactive shell exits.
|
|
|
|
<li>Alias expansion (see <a href="#Aliases">Aliases</a>) is performed by default.
|
|
|
|
<li>In the absence of any traps, Bash ignores <code>SIGTERM</code>
|
|
(see <a href="#Signals">Signals</a>).
|
|
|
|
<li>In the absence of any traps, <code>SIGINT</code> is caught and handled
|
|
((see <a href="#Signals">Signals</a>).
|
|
<code>SIGINT</code> will interrupt some shell builtins.
|
|
|
|
<li>An interactive login shell sends a <code>SIGHUP</code> to all jobs on exit
|
|
if the <code>huponexit</code> shell option has been enabled (see <a href="#Signals">Signals</a>).
|
|
|
|
<li>The <samp><span class="option">-n</span></samp> invocation option is ignored, and `<samp><span class="samp">set -n</span></samp>' has
|
|
no effect (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
<li>Bash will check for mail periodically, depending on the values of the
|
|
<samp><span class="env">MAIL</span></samp>, <samp><span class="env">MAILPATH</span></samp>, and <samp><span class="env">MAILCHECK</span></samp> shell variables
|
|
(see <a href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
<li>Expansion errors due to references to unbound shell variables after
|
|
`<samp><span class="samp">set -u</span></samp>' has been enabled will not cause the shell to exit
|
|
(see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
<li>The shell will not exit on expansion errors caused by <var>var</var> being unset
|
|
or null in <code>${</code><var>var</var><code>:?</code><var>word</var><code>}</code> expansions
|
|
(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<li>Redirection errors encountered by shell builtins will not cause the
|
|
shell to exit.
|
|
|
|
<li>When running in <span class="sc">posix</span> mode, a special builtin returning an error
|
|
status will not cause the shell to exit (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
|
|
|
|
<li>A failed <code>exec</code> will not cause the shell to exit
|
|
(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
<li>Parser syntax errors will not cause the shell to exit.
|
|
|
|
<li>Simple spelling correction for directory arguments to the <code>cd</code>
|
|
builtin is enabled by default (see the description of the <code>cdspell</code>
|
|
option to the <code>shopt</code> builtin in <a href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
|
|
<li>The shell will check the value of the <samp><span class="env">TMOUT</span></samp> variable and exit
|
|
if a command is not read within the specified number of seconds after
|
|
printing <samp><span class="env">$PS1</span></samp> (see <a href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
</ol>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-Conditional-Expressions"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Shell-Arithmetic">Shell Arithmetic</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Interactive-Shells">Interactive Shells</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.4 Bash Conditional Expressions</h3>
|
|
|
|
<p><a name="index-expressions_002c-conditional-237"></a>
|
|
Conditional expressions are used by the <code>[[</code> compound command
|
|
and the <code>test</code> and <code>[</code> builtin commands.
|
|
|
|
<p>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 <var>file</var> argument to one of the primaries is of the form
|
|
<samp><span class="file">/dev/fd/</span><var>N</var></samp>, then file descriptor <var>N</var> is checked.
|
|
If the <var>file</var> argument to one of the primaries is one of
|
|
<samp><span class="file">/dev/stdin</span></samp>, <samp><span class="file">/dev/stdout</span></samp>, or <samp><span class="file">/dev/stderr</span></samp>, file
|
|
descriptor 0, 1, or 2, respectively, is checked.
|
|
|
|
<p>Unless otherwise specified, primaries that operate on files follow symbolic
|
|
links and operate on the target of the link, rather than the link itself.
|
|
|
|
<dl>
|
|
<dt><code>-a </code><var>file</var><dd>True if <var>file</var> exists.
|
|
|
|
<br><dt><code>-b </code><var>file</var><dd>True if <var>file</var> exists and is a block special file.
|
|
|
|
<br><dt><code>-c </code><var>file</var><dd>True if <var>file</var> exists and is a character special file.
|
|
|
|
<br><dt><code>-d </code><var>file</var><dd>True if <var>file</var> exists and is a directory.
|
|
|
|
<br><dt><code>-e </code><var>file</var><dd>True if <var>file</var> exists.
|
|
|
|
<br><dt><code>-f </code><var>file</var><dd>True if <var>file</var> exists and is a regular file.
|
|
|
|
<br><dt><code>-g </code><var>file</var><dd>True if <var>file</var> exists and its set-group-id bit is set.
|
|
|
|
<br><dt><code>-h </code><var>file</var><dd>True if <var>file</var> exists and is a symbolic link.
|
|
|
|
<br><dt><code>-k </code><var>file</var><dd>True if <var>file</var> exists and its "sticky" bit is set.
|
|
|
|
<br><dt><code>-p </code><var>file</var><dd>True if <var>file</var> exists and is a named pipe (FIFO).
|
|
|
|
<br><dt><code>-r </code><var>file</var><dd>True if <var>file</var> exists and is readable.
|
|
|
|
<br><dt><code>-s </code><var>file</var><dd>True if <var>file</var> exists and has a size greater than zero.
|
|
|
|
<br><dt><code>-t </code><var>fd</var><dd>True if file descriptor <var>fd</var> is open and refers to a terminal.
|
|
|
|
<br><dt><code>-u </code><var>file</var><dd>True if <var>file</var> exists and its set-user-id bit is set.
|
|
|
|
<br><dt><code>-w </code><var>file</var><dd>True if <var>file</var> exists and is writable.
|
|
|
|
<br><dt><code>-x </code><var>file</var><dd>True if <var>file</var> exists and is executable.
|
|
|
|
<br><dt><code>-O </code><var>file</var><dd>True if <var>file</var> exists and is owned by the effective user id.
|
|
|
|
<br><dt><code>-G </code><var>file</var><dd>True if <var>file</var> exists and is owned by the effective group id.
|
|
|
|
<br><dt><code>-L </code><var>file</var><dd>True if <var>file</var> exists and is a symbolic link.
|
|
|
|
<br><dt><code>-S </code><var>file</var><dd>True if <var>file</var> exists and is a socket.
|
|
|
|
<br><dt><code>-N </code><var>file</var><dd>True if <var>file</var> exists and has been modified since it was last read.
|
|
|
|
<br><dt><var>file1</var><code> -nt </code><var>file2</var><dd>True if <var>file1</var> is newer (according to modification date)
|
|
than <var>file2</var>, or if <var>file1</var> exists and <var>file2</var> does not.
|
|
|
|
<br><dt><var>file1</var><code> -ot </code><var>file2</var><dd>True if <var>file1</var> is older than <var>file2</var>,
|
|
or if <var>file2</var> exists and <var>file1</var> does not.
|
|
|
|
<br><dt><var>file1</var><code> -ef </code><var>file2</var><dd>True if <var>file1</var> and <var>file2</var> refer to the same device and
|
|
inode numbers.
|
|
|
|
<br><dt><code>-o </code><var>optname</var><dd>True if shell option <var>optname</var> is enabled.
|
|
The list of options appears in the description of the <samp><span class="option">-o</span></samp>
|
|
option to the <code>set</code> builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
<br><dt><code>-z </code><var>string</var><dd>True if the length of <var>string</var> is zero.
|
|
|
|
<br><dt><code>-n </code><var>string</var><dt><var>string</var><dd>True if the length of <var>string</var> is non-zero.
|
|
|
|
<br><dt><var>string1</var><code> == </code><var>string2</var><dd>True if the strings are equal.
|
|
`<samp><span class="samp">=</span></samp>' may be used in place of `<samp><span class="samp">==</span></samp>' for strict <span class="sc">posix</span> compliance.
|
|
|
|
<br><dt><var>string1</var><code> != </code><var>string2</var><dd>True if the strings are not equal.
|
|
|
|
<br><dt><var>string1</var><code> < </code><var>string2</var><dd>True if <var>string1</var> sorts before <var>string2</var> lexicographically
|
|
in the current locale.
|
|
|
|
<br><dt><var>string1</var><code> > </code><var>string2</var><dd>True if <var>string1</var> sorts after <var>string2</var> lexicographically
|
|
in the current locale.
|
|
|
|
<br><dt><var>arg1</var><code> OP </code><var>arg2</var><dd><code>OP</code> is one of
|
|
`<samp><span class="samp">-eq</span></samp>', `<samp><span class="samp">-ne</span></samp>', `<samp><span class="samp">-lt</span></samp>', `<samp><span class="samp">-le</span></samp>', `<samp><span class="samp">-gt</span></samp>', or `<samp><span class="samp">-ge</span></samp>'.
|
|
These arithmetic binary operators return true if <var>arg1</var>
|
|
is equal to, not equal to, less than, less than or equal to,
|
|
greater than, or greater than or equal to <var>arg2</var>,
|
|
respectively. <var>Arg1</var> and <var>arg2</var>
|
|
may be positive or negative integers.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Shell-Arithmetic"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Aliases">Aliases</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.5 Shell Arithmetic</h3>
|
|
|
|
<p><a name="index-arithmetic_002c-shell-238"></a><a name="index-shell-arithmetic-239"></a><a name="index-expressions_002c-arithmetic-240"></a><a name="index-evaluation_002c-arithmetic-241"></a><a name="index-arithmetic-evaluation-242"></a>
|
|
The shell allows arithmetic expressions to be evaluated, as one of
|
|
the shell expansions or by the <code>let</code> and the <samp><span class="option">-i</span></samp> option
|
|
to the <code>declare</code> builtins.
|
|
|
|
<p>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.
|
|
|
|
<dl>
|
|
<dt><var>id</var><code>++ </code><var>id</var><code>--</code><dd>variable post-increment and post-decrement
|
|
|
|
<br><dt><code>++</code><var>id</var><code> --</code><var>id</var><dd>variable pre-increment and pre-decrement
|
|
|
|
<br><dt><code>- +</code><dd>unary minus and plus
|
|
|
|
<br><dt><code>! ~</code><dd>logical and bitwise negation
|
|
|
|
<br><dt><code>**</code><dd>exponentiation
|
|
|
|
<br><dt><code>* / %</code><dd>multiplication, division, remainder
|
|
|
|
<br><dt><code>+ -</code><dd>addition, subtraction
|
|
|
|
<br><dt><code><< >></code><dd>left and right bitwise shifts
|
|
|
|
<br><dt><code><= >= < ></code><dd>comparison
|
|
|
|
<br><dt><code>== !=</code><dd>equality and inequality
|
|
|
|
<br><dt><code>&</code><dd>bitwise AND
|
|
|
|
<br><dt><code>^</code><dd>bitwise exclusive OR
|
|
|
|
<br><dt><code>|</code><dd>bitwise OR
|
|
|
|
<br><dt><code>&&</code><dd>logical AND
|
|
|
|
<br><dt><code>||</code><dd>logical OR
|
|
|
|
<br><dt><code>expr ? expr : expr</code><dd>conditional operator
|
|
|
|
<br><dt><code>= *= /= %= += -= <<= >>= &= ^= |=</code><dd>assignment
|
|
|
|
<br><dt><code>expr1 , expr2</code><dd>comma
|
|
</dl>
|
|
|
|
<p>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
|
|
<var>integer</var> attribute using `<samp><span class="samp">declare -i</span></samp>' 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.
|
|
|
|
<p>Constants with a leading 0 are interpreted as octal numbers.
|
|
A leading `<samp><span class="samp">0x</span></samp>' or `<samp><span class="samp">0X</span></samp>' denotes hexadecimal. Otherwise,
|
|
numbers take the form [<var>base</var><code>#</code>]<var>n</var>, where <var>base</var>
|
|
is a decimal number between 2 and 64 representing the arithmetic
|
|
base, and <var>n</var> is a number in that base. If <var>base</var><code>#</code> is
|
|
omitted, then base 10 is used.
|
|
The digits greater than 9 are represented by the lowercase letters,
|
|
the uppercase letters, `<samp><span class="samp">@</span></samp>', and `<samp><span class="samp">_</span></samp>', in that order.
|
|
If <var>base</var> is less than or equal to 36, lowercase and uppercase
|
|
letters may be used interchangeably to represent numbers between 10
|
|
and 35.
|
|
|
|
<p>Operators are evaluated in order of precedence. Sub-expressions in
|
|
parentheses are evaluated first and may override the precedence
|
|
rules above.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Aliases"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Arrays">Arrays</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Shell-Arithmetic">Shell Arithmetic</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.6 Aliases</h3>
|
|
|
|
<p><a name="index-alias-expansion-243"></a>
|
|
<var>Aliases</var> 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 <code>alias</code> and <code>unalias</code> builtin commands.
|
|
|
|
<p>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 `<samp><span class="samp">/</span></samp>', `<samp><span class="samp">$</span></samp>', `<samp><span class="samp">`</span></samp>', `<samp><span class="samp">=</span></samp>' 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 <code>ls</code> to <code>"ls -F"</code>,
|
|
for instance, and Bash does not try to recursively expand the
|
|
replacement text. If the last character of the alias value is a
|
|
space or tab character, then the next command word following the
|
|
alias is also checked for alias expansion.
|
|
|
|
<p>Aliases are created and listed with the <code>alias</code>
|
|
command, and removed with the <code>unalias</code> command.
|
|
|
|
<p>There is no mechanism for using arguments in the replacement text,
|
|
as in <code>csh</code>.
|
|
If arguments are needed, a shell function should be used
|
|
(see <a href="#Shell-Functions">Shell Functions</a>).
|
|
|
|
<p>Aliases are not expanded when the shell is not interactive,
|
|
unless the <code>expand_aliases</code> shell option is set using
|
|
<code>shopt</code> (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>).
|
|
|
|
<p>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 <code>alias</code>
|
|
in compound commands.
|
|
|
|
<p>For almost every purpose, shell functions are preferred over aliases.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Arrays"></a>
|
|
Next: <a rel="next" accesskey="n" href="#The-Directory-Stack">The Directory Stack</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Aliases">Aliases</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.7 Arrays</h3>
|
|
|
|
<p><a name="index-arrays-244"></a>
|
|
Bash provides one-dimensional array variables. Any variable may be used as
|
|
an array; the <code>declare</code> 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. Arrays are zero-based.
|
|
|
|
<p>An array is created automatically if any variable is assigned to using
|
|
the syntax
|
|
<pre class="example"> name[<var>subscript</var>]=<var>value</var>
|
|
</pre>
|
|
<p class="noindent">The <var>subscript</var>
|
|
is treated as an arithmetic expression that must evaluate to a number
|
|
greater than or equal to zero. To explicitly declare an array, use
|
|
<pre class="example"> declare -a <var>name</var>
|
|
</pre>
|
|
<p class="noindent">The syntax
|
|
<pre class="example"> declare -a <var>name</var>[<var>subscript</var>]
|
|
</pre>
|
|
<p class="noindent">is also accepted; the <var>subscript</var> is ignored. Attributes may be
|
|
specified for an array variable using the <code>declare</code> and
|
|
<code>readonly</code> builtins. Each attribute applies to all members of
|
|
an array.
|
|
|
|
<p>Arrays are assigned to using compound assignments of the form
|
|
<pre class="example"> name=(value<var>1</var> ... value<var>n</var>)
|
|
</pre>
|
|
<p class="noindent">where each
|
|
<var>value</var> is of the form <code>[[</code><var>subscript</var><code>]=]</code><var>string</var>. 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.
|
|
This syntax is also accepted by the <code>declare</code>
|
|
builtin. Individual array elements may be assigned to using the
|
|
<code>name[</code><var>subscript</var><code>]=</code><var>value</var> syntax introduced above.
|
|
|
|
<p>Any element of an array may be referenced using
|
|
<code>${name[</code><var>subscript</var><code>]}</code>.
|
|
The braces are required to avoid
|
|
conflicts with the shell's filename expansion operators. If the
|
|
<var>subscript</var> is `<samp><span class="samp">@</span></samp>' or `<samp><span class="samp">*</span></samp>', the word expands to all members
|
|
of the array <var>name</var>. These subscripts differ only when the word
|
|
appears within double quotes.
|
|
If the word is double-quoted,
|
|
<code>${name[*]}</code> expands to a single word with
|
|
the value of each array member separated by the first character of the
|
|
<samp><span class="env">IFS</span></samp> variable, and <code>${name[@]}</code> expands each element of
|
|
<var>name</var> to a separate word. When there are no array members,
|
|
<code>${name[@]}</code> 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 `<samp><span class="samp">@</span></samp>' and `<samp><span class="samp">*</span></samp>'.
|
|
<code>${#name[</code><var>subscript</var><code>]}</code> expands to the length of
|
|
<code>${name[</code><var>subscript</var><code>]}</code>.
|
|
If <var>subscript</var> is `<samp><span class="samp">@</span></samp>' or
|
|
`<samp><span class="samp">*</span></samp>', the expansion is the number of elements in the array.
|
|
Referencing an array variable without a subscript is equivalent to
|
|
referencing element zero.
|
|
|
|
<p>The <code>unset</code> builtin is used to destroy arrays.
|
|
<code>unset</code> <var>name</var>[<var>subscript</var>]
|
|
destroys the array element at index <var>subscript</var>.
|
|
Care must be taken to avoid unwanted side effects caused by filename
|
|
generation.
|
|
<code>unset</code> <var>name</var>, where <var>name</var> is an array, removes the
|
|
entire array. A subscript of `<samp><span class="samp">*</span></samp>' or `<samp><span class="samp">@</span></samp>' also removes the
|
|
entire array.
|
|
|
|
<p>The <code>declare</code>, <code>local</code>, and <code>readonly</code>
|
|
builtins each accept a <samp><span class="option">-a</span></samp>
|
|
option to specify an array. The <code>read</code>
|
|
builtin accepts a <samp><span class="option">-a</span></samp>
|
|
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 <code>set</code> and <code>declare</code>
|
|
builtins display array values in a way that allows them to be
|
|
reused as input.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="The-Directory-Stack"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Printing-a-Prompt">Printing a Prompt</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Arrays">Arrays</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.8 The Directory Stack</h3>
|
|
|
|
<p><a name="index-directory-stack-245"></a>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Directory-Stack-Builtins">Directory Stack Builtins</a>: Bash builtin commands to manipulate
|
|
the directory stack.
|
|
</ul>
|
|
|
|
<p>The directory stack is a list of recently-visited directories. The
|
|
<code>pushd</code> builtin adds directories to the stack as it changes
|
|
the current directory, and the <code>popd</code> builtin removes specified
|
|
directories from the stack and changes the current directory to
|
|
the directory removed. The <code>dirs</code> builtin displays the contents
|
|
of the directory stack.
|
|
|
|
<p>The contents of the directory stack are also visible
|
|
as the value of the <samp><span class="env">DIRSTACK</span></samp> shell variable.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Directory-Stack-Builtins"></a>
|
|
Up: <a rel="up" accesskey="u" href="#The-Directory-Stack">The Directory Stack</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">6.8.1 Directory Stack Builtins</h4>
|
|
|
|
<dl>
|
|
<dt><code>dirs</code><dd><a name="index-dirs-246"></a>
|
|
<pre class="example"> dirs [+<var>N</var> | -<var>N</var>] [-clpv]
|
|
</pre>
|
|
<p>Display the list of currently remembered directories. Directories
|
|
are added to the list with the <code>pushd</code> command; the
|
|
<code>popd</code> command removes directories from the list.
|
|
<dl>
|
|
<dt><code>+</code><var>N</var><dd>Displays the <var>N</var>th directory (counting from the left of the
|
|
list printed by <code>dirs</code> when invoked without options), starting
|
|
with zero.
|
|
<br><dt><code>-</code><var>N</var><dd>Displays the <var>N</var>th directory (counting from the right of the
|
|
list printed by <code>dirs</code> when invoked without options), starting
|
|
with zero.
|
|
<br><dt><code>-c</code><dd>Clears the directory stack by deleting all of the elements.
|
|
<br><dt><code>-l</code><dd>Produces a longer listing; the default listing format uses a
|
|
tilde to denote the home directory.
|
|
<br><dt><code>-p</code><dd>Causes <code>dirs</code> to print the directory stack with one entry per
|
|
line.
|
|
<br><dt><code>-v</code><dd>Causes <code>dirs</code> to print the directory stack with one entry per
|
|
line, prefixing each entry with its index in the stack.
|
|
</dl>
|
|
|
|
<br><dt><code>popd</code><dd><a name="index-popd-247"></a>
|
|
<pre class="example"> popd [+<var>N</var> | -<var>N</var>] [-n]
|
|
</pre>
|
|
<p>Remove the top entry from the directory stack, and <code>cd</code>
|
|
to the new top directory.
|
|
When no arguments are given, <code>popd</code>
|
|
removes the top directory from the stack and
|
|
performs a <code>cd</code> to the new top directory. The
|
|
elements are numbered from 0 starting at the first directory listed with
|
|
<code>dirs</code>; i.e., <code>popd</code> is equivalent to <code>popd +0</code>.
|
|
<dl>
|
|
<dt><code>+</code><var>N</var><dd>Removes the <var>N</var>th directory (counting from the left of the
|
|
list printed by <code>dirs</code>), starting with zero.
|
|
<br><dt><code>-</code><var>N</var><dd>Removes the <var>N</var>th directory (counting from the right of the
|
|
list printed by <code>dirs</code>), starting with zero.
|
|
<br><dt><code>-n</code><dd>Suppresses the normal change of directory when removing directories
|
|
from the stack, so that only the stack is manipulated.
|
|
</dl>
|
|
|
|
<p><a name="index-pushd-248"></a><br><dt><code>pushd</code><dd>
|
|
<pre class="example"> pushd [-n] [<var>+N</var> | <var>-N</var> | <var>dir</var> ]
|
|
</pre>
|
|
<p>Save the current directory on the top of the directory stack
|
|
and then <code>cd</code> to <var>dir</var>.
|
|
With no arguments, <code>pushd</code> exchanges the top two directories.
|
|
|
|
<dl>
|
|
<dt><code>-n</code><dd>Suppresses the normal change of directory when adding directories
|
|
to the stack, so that only the stack is manipulated.
|
|
<br><dt><code>+</code><var>N</var><dd>Brings the <var>N</var>th directory (counting from the left of the
|
|
list printed by <code>dirs</code>, starting with zero) to the top of
|
|
the list by rotating the stack.
|
|
<br><dt><code>-</code><var>N</var><dd>Brings the <var>N</var>th directory (counting from the right of the
|
|
list printed by <code>dirs</code>, starting with zero) to the top of
|
|
the list by rotating the stack.
|
|
<br><dt><var>dir</var><dd>Makes the current working directory be the top of the stack, and then
|
|
executes the equivalent of `<code>cd</code> <var>dir</var>'.
|
|
<code>cd</code>s to <var>dir</var>.
|
|
</dl>
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Printing-a-Prompt"></a>
|
|
Next: <a rel="next" accesskey="n" href="#The-Restricted-Shell">The Restricted Shell</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#The-Directory-Stack">The Directory Stack</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.9 Controlling the Prompt</h3>
|
|
|
|
<p><a name="index-prompting-249"></a>
|
|
The value of the variable <samp><span class="env">PROMPT_COMMAND</span></samp> is examined just before
|
|
Bash prints each primary prompt. If <samp><span class="env">PROMPT_COMMAND</span></samp> is set and
|
|
has a non-null value, then the
|
|
value is executed just as if it had been typed on the command line.
|
|
|
|
<p>In addition, the following table describes the special characters which
|
|
can appear in the prompt variables:
|
|
|
|
<dl>
|
|
<dt><code>\a</code><dd>A bell character.
|
|
<br><dt><code>\d</code><dd>The date, in "Weekday Month Date" format (e.g., "Tue May 26").
|
|
<br><dt><code>\D{</code><var>format</var><code>}</code><dd>The <var>format</var> is passed to <code>strftime</code>(3) and the result is inserted
|
|
into the prompt string; an empty <var>format</var> results in a locale-specific
|
|
time representation. The braces are required.
|
|
<br><dt><code>\e</code><dd>An escape character.
|
|
<br><dt><code>\h</code><dd>The hostname, up to the first `.'.
|
|
<br><dt><code>\H</code><dd>The hostname.
|
|
<br><dt><code>\j</code><dd>The number of jobs currently managed by the shell.
|
|
<br><dt><code>\l</code><dd>The basename of the shell's terminal device name.
|
|
<br><dt><code>\n</code><dd>A newline.
|
|
<br><dt><code>\r</code><dd>A carriage return.
|
|
<br><dt><code>\s</code><dd>The name of the shell, the basename of <code>$0</code> (the portion
|
|
following the final slash).
|
|
<br><dt><code>\t</code><dd>The time, in 24-hour HH:MM:SS format.
|
|
<br><dt><code>\T</code><dd>The time, in 12-hour HH:MM:SS format.
|
|
<br><dt><code>\@</code><dd>The time, in 12-hour am/pm format.
|
|
<br><dt><code>\A</code><dd>The time, in 24-hour HH:MM format.
|
|
<br><dt><code>\u</code><dd>The username of the current user.
|
|
<br><dt><code>\v</code><dd>The version of Bash (e.g., 2.00)
|
|
<br><dt><code>\V</code><dd>The release of Bash, version + patchlevel (e.g., 2.00.0)
|
|
<br><dt><code>\w</code><dd>The current working directory, with <samp><span class="env">$HOME</span></samp> abbreviated with a tilde.
|
|
<br><dt><code>\W</code><dd>The basename of <samp><span class="env">$PWD</span></samp>, with <samp><span class="env">$HOME</span></samp> abbreviated with a tilde.
|
|
<br><dt><code>\!</code><dd>The history number of this command.
|
|
<br><dt><code>\#</code><dd>The command number of this command.
|
|
<br><dt><code>\$</code><dd>If the effective uid is 0, <code>#</code>, otherwise <code>$</code>.
|
|
<br><dt><code>\</code><var>nnn</var><dd>The character whose ASCII code is the octal value <var>nnn</var>.
|
|
<br><dt><code>\\</code><dd>A backslash.
|
|
<br><dt><code>\[</code><dd>Begin a sequence of non-printing characters. This could be used to
|
|
embed a terminal control sequence into the prompt.
|
|
<br><dt><code>\]</code><dd>End a sequence of non-printing characters.
|
|
</dl>
|
|
|
|
<p>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
|
|
(see <a href="#Bash-History-Facilities">Bash History Facilities</a>), while the command number is
|
|
the position in the sequence of commands executed during the current
|
|
shell session.
|
|
|
|
<p>After the string is decoded, it is expanded via
|
|
parameter expansion, command substitution, arithmetic
|
|
expansion, and quote removal, subject to the value of the
|
|
<code>promptvars</code> shell option (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="The-Restricted-Shell"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bash-POSIX-Mode">Bash POSIX Mode</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Printing-a-Prompt">Printing a Prompt</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.10 The Restricted Shell</h3>
|
|
|
|
<p><a name="index-restricted-shell-250"></a>
|
|
If Bash is started with the name <code>rbash</code>, or the
|
|
<samp><span class="option">--restricted</span></samp>
|
|
or
|
|
<samp><span class="option">-r</span></samp>
|
|
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 <code>bash</code>
|
|
with the exception that the following are disallowed or not performed:
|
|
|
|
<ul>
|
|
<li>Changing directories with the <code>cd</code> builtin.
|
|
<li>Setting or unsetting the values of the <samp><span class="env">SHELL</span></samp>, <samp><span class="env">PATH</span></samp>,
|
|
<samp><span class="env">ENV</span></samp>, or <samp><span class="env">BASH_ENV</span></samp> variables.
|
|
<li>Specifying command names containing slashes.
|
|
<li>Specifying a filename containing a slash as an argument to the <code>.</code>
|
|
builtin command.
|
|
<li>Specifying a filename containing a slash as an argument to the <samp><span class="option">-p</span></samp>
|
|
option to the <code>hash</code> builtin command.
|
|
<li>Importing function definitions from the shell environment at startup.
|
|
<li>Parsing the value of <samp><span class="env">SHELLOPTS</span></samp> from the shell environment at startup.
|
|
<li>Redirecting output using the `<samp><span class="samp">></span></samp>', `<samp><span class="samp">>|</span></samp>', `<samp><span class="samp"><></span></samp>', `<samp><span class="samp">>&</span></samp>',
|
|
`<samp><span class="samp">&></span></samp>', and `<samp><span class="samp">>></span></samp>' redirection operators.
|
|
<li>Using the <code>exec</code> builtin to replace the shell with another command.
|
|
<li>Adding or deleting builtin commands with the
|
|
<samp><span class="option">-f</span></samp> and <samp><span class="option">-d</span></samp> options to the <code>enable</code> builtin.
|
|
<li>Using the <code>enable</code> builtin command to enable disabled shell builtins.
|
|
<li>Specifying the <samp><span class="option">-p</span></samp> option to the <code>command</code> builtin.
|
|
<li>Turning off restricted mode with `<samp><span class="samp">set +r</span></samp>' or `<samp><span class="samp">set +o restricted</span></samp>'.
|
|
</ul>
|
|
|
|
<p>These restrictions are enforced after any startup files are read.
|
|
|
|
<p>When a command that is found to be a shell script is executed
|
|
(see <a href="#Shell-Scripts">Shell Scripts</a>), <code>rbash</code> turns off any restrictions in
|
|
the shell spawned to execute the script.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-POSIX-Mode"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#The-Restricted-Shell">The Restricted Shell</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bash-Features">Bash Features</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">6.11 Bash POSIX Mode</h3>
|
|
|
|
<p><a name="index-POSIX-Mode-251"></a>
|
|
Starting Bash with the <samp><span class="option">--posix</span></samp> command-line option or executing
|
|
`<samp><span class="samp">set -o posix</span></samp>' while Bash is running will cause Bash to conform more
|
|
closely to the <span class="sc">posix</span> standard by changing the behavior to
|
|
match that specified by <span class="sc">posix</span> in areas where the Bash default differs.
|
|
|
|
<p>When invoked as <code>sh</code>, Bash enters <span class="sc">posix</span> mode after reading the
|
|
startup files.
|
|
|
|
<p>The following list is what's changed when `<span class="sc">posix</span> mode' is in effect:
|
|
|
|
<ol type=1 start=1>
|
|
<li>When a command in the hash table no longer exists, Bash will re-search
|
|
<samp><span class="env">$PATH</span></samp> to find the new location. This is also available with
|
|
`<samp><span class="samp">shopt -s checkhash</span></samp>'.
|
|
|
|
<li>The message printed by the job control code and builtins when a job
|
|
exits with a non-zero status is `Done(status)'.
|
|
|
|
<li>The message printed by the job control code and builtins when a job
|
|
is stopped is `Stopped(<var>signame</var>)', where <var>signame</var> is, for
|
|
example, <code>SIGTSTP</code>.
|
|
|
|
<li>The <code>bg</code> 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.
|
|
|
|
<li>Reserved words appearing in a context where reserved words are recognized
|
|
do not undergo alias expansion.
|
|
|
|
<li>The <span class="sc">posix</span> <samp><span class="env">PS1</span></samp> and <samp><span class="env">PS2</span></samp> expansions of `<samp><span class="samp">!</span></samp>' to
|
|
the history number and `<samp><span class="samp">!!</span></samp>' to `<samp><span class="samp">!</span></samp>' are enabled,
|
|
and parameter expansion is performed on the values of <samp><span class="env">PS1</span></samp> and
|
|
<samp><span class="env">PS2</span></samp> regardless of the setting of the <code>promptvars</code> option.
|
|
|
|
<li>The <span class="sc">posix</span> startup files are executed (<samp><span class="env">$ENV</span></samp>) rather than
|
|
the normal Bash files.
|
|
|
|
<li>Tilde expansion is only performed on assignments preceding a command
|
|
name, rather than on all assignment statements on the line.
|
|
|
|
<li>The default history file is <samp><span class="file">~/.sh_history</span></samp> (this is the
|
|
default value of <samp><span class="env">$HISTFILE</span></samp>).
|
|
|
|
<li>The output of `<samp><span class="samp">kill -l</span></samp>' prints all the signal names on a single line,
|
|
separated by spaces, without the `<samp><span class="samp">SIG</span></samp>' prefix.
|
|
|
|
<li>The <code>kill</code> builtin does not accept signal names with a `<samp><span class="samp">SIG</span></samp>'
|
|
prefix.
|
|
|
|
<li>Non-interactive shells exit if <var>filename</var> in <code>.</code> <var>filename</var>
|
|
is not found.
|
|
|
|
<li>Non-interactive shells exit if a syntax error in an arithmetic expansion
|
|
results in an invalid expression.
|
|
|
|
<li>Redirection operators do not perform filename expansion on the word
|
|
in the redirection unless the shell is interactive.
|
|
|
|
<li>Redirection operators do not perform word splitting on the word in the
|
|
redirection.
|
|
|
|
<li>Function names must be valid shell <code>name</code>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.
|
|
|
|
<li><span class="sc">posix</span> special builtins are found before shell functions
|
|
during command lookup.
|
|
|
|
<li>If a <span class="sc">posix</span> 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.
|
|
|
|
<li>If <samp><span class="env">CDPATH</span></samp> is set, the <code>cd</code> builtin will not implicitly
|
|
append the current directory to it. This means that <code>cd</code> will
|
|
fail if no valid directory name can be constructed from
|
|
any of the entries in <samp><span class="env">$CDPATH</span></samp>, even if the a directory with
|
|
the same name as the name given as an argument to <code>cd</code> exists
|
|
in the current directory.
|
|
|
|
<li>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.
|
|
|
|
<li>A non-interactive shell exits with an error status if the iteration
|
|
variable in a <code>for</code> statement or the selection variable in a
|
|
<code>select</code> statement is a readonly variable.
|
|
|
|
<li>Process substitution is not available.
|
|
|
|
<li>Assignment statements preceding <span class="sc">posix</span> special builtins
|
|
persist in the shell environment after the builtin completes.
|
|
|
|
<li>Assignment statements preceding shell function calls persist in the
|
|
shell environment after the function returns, as if a <span class="sc">posix</span>
|
|
special builtin command had been executed.
|
|
|
|
<li>The <code>export</code> and <code>readonly</code> builtin commands display their
|
|
output in the format required by <span class="sc">posix</span>.
|
|
|
|
<li>The <code>trap</code> builtin displays signal names without the leading
|
|
<code>SIG</code>.
|
|
|
|
<li>The <code>trap</code> 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 `<samp><span class="samp">-</span></samp>' as the
|
|
first argument.
|
|
|
|
<li>The <code>.</code> and <code>source</code> builtins do not search the current directory
|
|
for the filename argument if it is not found by searching <samp><span class="env">PATH</span></samp>.
|
|
|
|
<li>Subshells spawned to execute command substitutions inherit the value of
|
|
the <samp><span class="option">-e</span></samp> option from the parent shell. When not in <span class="sc">posix</span> mode,
|
|
Bash clears the <samp><span class="option">-e</span></samp> option in such subshells.
|
|
|
|
<li>Alias expansion is always enabled, even in non-interactive shells.
|
|
|
|
<li>When the <code>alias</code> builtin displays alias definitions, it does not
|
|
display them with a leading `<samp><span class="samp">alias </span></samp>' unless the <samp><span class="option">-p</span></samp> option
|
|
is supplied.
|
|
|
|
<li>When the <code>set</code> builtin is invoked without options, it does not display
|
|
shell function names and definitions.
|
|
|
|
<li>When the <code>set</code> builtin is invoked without options, it displays
|
|
variable values without quotes, unless they contain shell metacharacters,
|
|
even if the result contains nonprinting characters.
|
|
|
|
<li>When the <code>cd</code> builtin is invoked in <var>logical</var> mode, and the pathname
|
|
constructed from <code>$PWD</code> and the directory name supplied as an argument
|
|
does not refer to an existing directory, <code>cd</code> will fail instead of
|
|
falling back to <var>physical</var> mode.
|
|
|
|
<li>When the <code>pwd</code> builtin is supplied the <samp><span class="option">-P</span></samp> option, it resets
|
|
<code>$PWD</code> to a pathname containing no symlinks.
|
|
|
|
<li>The <code>pwd</code> 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
|
|
<samp><span class="option">-P</span></samp> option.
|
|
|
|
<li>When listing the history, the <code>fc</code> builtin does not include an
|
|
indication of whether or not a history entry has been modified.
|
|
|
|
<li>The default editor used by <code>fc</code> is <code>ed</code>.
|
|
|
|
<li>The <code>type</code> and <code>command</code> 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 <code>$PATH</code>.
|
|
|
|
<li>The <code>vi</code> editing mode will invoke the <code>vi</code> editor directly when
|
|
the `<samp><span class="samp">v</span></samp>' command is run, instead of checking <code>$FCEDIT</code> and
|
|
<code>$EDITOR</code>.
|
|
|
|
<li>When the <code>xpg_echo</code> option is enabled, Bash does not attempt to interpret
|
|
any arguments to <code>echo</code> as options. Each argument is displayed, after
|
|
escape characters are converted.
|
|
|
|
</ol>
|
|
|
|
<p>There is other <span class="sc">posix</span> behavior that Bash does not implement by
|
|
default even when in <span class="sc">posix</span> mode.
|
|
Specifically:
|
|
|
|
<ol type=1 start=1>
|
|
|
|
<li>The <code>fc</code> builtin checks <code>$EDITOR</code> as a program to edit history
|
|
entries if <code>FCEDIT</code> is unset, rather than defaulting directly to
|
|
<code>ed</code>. <code>fc</code> uses <code>ed</code> if <code>EDITOR</code> is unset.
|
|
|
|
<li>As noted above, Bash requires the <code>xpg_echo</code> option to be enabled for
|
|
the <code>echo</code> builtin to be fully conformant.
|
|
|
|
</ol>
|
|
|
|
<p>Bash can be configured to be <span class="sc">posix</span>-conformant by default, by specifying
|
|
the <samp><span class="option">--enable-strict-posix-default</span></samp> to <code>configure</code> when building
|
|
(see <a href="#Optional-Features">Optional Features</a>).
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Job-Control"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Using-History-Interactively">Using History Interactively</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Bash-Features">Bash Features</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">7 Job Control</h2>
|
|
|
|
<p>This chapter discusses what job control is, how it works, and how
|
|
Bash allows you to access its facilities.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Job-Control-Basics">Job Control Basics</a>: How job control works.
|
|
<li><a accesskey="2" href="#Job-Control-Builtins">Job Control Builtins</a>: Bash builtin commands used to interact
|
|
with job control.
|
|
<li><a accesskey="3" href="#Job-Control-Variables">Job Control Variables</a>: Variables Bash uses to customize job
|
|
control.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Job-Control-Basics"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Job-Control-Builtins">Job Control Builtins</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Job-Control">Job Control</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">7.1 Job Control Basics</h3>
|
|
|
|
<p><a name="index-job-control-252"></a><a name="index-foreground-253"></a><a name="index-background-254"></a><a name="index-suspending-jobs-255"></a>
|
|
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 system's terminal driver and Bash.
|
|
|
|
<p>The shell associates a <var>job</var> with each pipeline. It keeps a
|
|
table of currently executing jobs, which may be listed with the
|
|
<code>jobs</code> command. When Bash starts a job
|
|
asynchronously, it prints a line that looks
|
|
like:
|
|
<pre class="example"> [1] 25647
|
|
</pre>
|
|
<p class="noindent">indicating that this job is job number 1 and that the process <span class="sc">id</span>
|
|
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 <var>job</var> abstraction as the
|
|
basis for job control.
|
|
|
|
<p>To facilitate the implementation of the user interface to job
|
|
control, the operating system maintains the notion of a current terminal
|
|
process group <span class="sc">id</span>. Members of this process group (processes whose
|
|
process group <span class="sc">id</span> is equal to the current terminal process group
|
|
<span class="sc">id</span>) receive keyboard-generated signals such as <code>SIGINT</code>.
|
|
These processes are said to be in the foreground. Background
|
|
processes are those whose process group <span class="sc">id</span> differs from the
|
|
terminal's; such processes are immune to keyboard-generated
|
|
signals. Only foreground processes are allowed to read from or
|
|
write to the terminal. Background processes which attempt to
|
|
read from (write to) the terminal are sent a <code>SIGTTIN</code>
|
|
(<code>SIGTTOU</code>) signal by the terminal driver, which, unless
|
|
caught, suspends the process.
|
|
|
|
<p>If the operating system on which Bash is running supports
|
|
job control, Bash contains facilities to use it. Typing the
|
|
<var>suspend</var> character (typically `<samp><span class="samp">^Z</span></samp>', Control-Z) while a
|
|
process is running causes that process to be stopped and returns
|
|
control to Bash. Typing the <var>delayed suspend</var> character
|
|
(typically `<samp><span class="samp">^Y</span></samp>', 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 <code>bg</code> command to continue it in the
|
|
background, the <code>fg</code> command to continue it in the
|
|
foreground, or the <code>kill</code> command to kill it. A `<samp><span class="samp">^Z</span></samp>'
|
|
takes effect immediately, and has the additional side effect of
|
|
causing pending output and typeahead to be discarded.
|
|
|
|
<p>There are a number of ways to refer to a job in the shell. The
|
|
character `<samp><span class="samp">%</span></samp>' introduces a job name.
|
|
|
|
<p>Job number <code>n</code> may be referred to as `<samp><span class="samp">%n</span></samp>'.
|
|
The symbols `<samp><span class="samp">%%</span></samp>' and `<samp><span class="samp">%+</span></samp>' 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 `<samp><span class="samp">%</span></samp>' (with no accompanying job specification) also refers
|
|
to the current job.
|
|
The previous job may be referenced using `<samp><span class="samp">%-</span></samp>'. In output
|
|
pertaining to jobs (e.g., the output of the <code>jobs</code> command),
|
|
the current job is always flagged with a `<samp><span class="samp">+</span></samp>', and the
|
|
previous job with a `<samp><span class="samp">-</span></samp>'.
|
|
|
|
<p>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, `<samp><span class="samp">%ce</span></samp>' refers
|
|
to a stopped <code>ce</code> job. Using `<samp><span class="samp">%?ce</span></samp>', on the
|
|
other hand, refers to any job containing the string `<samp><span class="samp">ce</span></samp>' in
|
|
its command line. If the prefix or substring matches more than one job,
|
|
Bash reports an error.
|
|
|
|
<p>Simply naming a job can be used to bring it into the foreground:
|
|
`<samp><span class="samp">%1</span></samp>' is a synonym for `<samp><span class="samp">fg %1</span></samp>', bringing job 1 from the
|
|
background into the foreground. Similarly, `<samp><span class="samp">%1 &</span></samp>' resumes
|
|
job 1 in the background, equivalent to `<samp><span class="samp">bg %1</span></samp>'
|
|
|
|
<p>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 <samp><span class="option">-b</span></samp> option to the <code>set</code> builtin is enabled,
|
|
Bash reports such changes immediately (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
Any trap on <code>SIGCHLD</code> is executed for each child process
|
|
that exits.
|
|
|
|
<p>If an attempt to exit Bash is made while jobs are stopped, (or running, if
|
|
the <code>checkjobs</code> option is enabled – see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), the
|
|
shell prints a warning message, and if the <code>checkjobs</code> option is
|
|
enabled, lists the jobs and their statuses.
|
|
The <code>jobs</code> 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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Job-Control-Builtins"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Job-Control-Variables">Job Control Variables</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Job-Control-Basics">Job Control Basics</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Job-Control">Job Control</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">7.2 Job Control Builtins</h3>
|
|
|
|
<dl>
|
|
<dt><code>bg</code><dd><a name="index-bg-256"></a>
|
|
<pre class="example"> bg [<var>jobspec</var> ...]
|
|
</pre>
|
|
<p>Resume each suspended job <var>jobspec</var> in the background, as if it
|
|
had been started with `<samp><span class="samp">&</span></samp>'.
|
|
If <var>jobspec</var> 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
|
|
<var>jobspec</var> was not found or specifies a job
|
|
that was started without job control.
|
|
|
|
<br><dt><code>fg</code><dd><a name="index-fg-257"></a>
|
|
<pre class="example"> fg [<var>jobspec</var>]
|
|
</pre>
|
|
<p>Resume the job <var>jobspec</var> in the foreground and make it the current job.
|
|
If <var>jobspec</var> 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, <var>jobspec</var> does not specify a valid job or
|
|
<var>jobspec</var> specifies a job that was started without job control.
|
|
|
|
<br><dt><code>jobs</code><dd><a name="index-jobs-258"></a>
|
|
<pre class="example"> jobs [-lnprs] [<var>jobspec</var>]
|
|
jobs -x <var>command</var> [<var>arguments</var>]
|
|
</pre>
|
|
<p>The first form lists the active jobs. The options have the
|
|
following meanings:
|
|
|
|
<dl>
|
|
<dt><code>-l</code><dd>List process <span class="sc">id</span>s in addition to the normal information.
|
|
|
|
<br><dt><code>-n</code><dd>Display information only about jobs that have changed status since
|
|
the user was last notified of their status.
|
|
|
|
<br><dt><code>-p</code><dd>List only the process <span class="sc">id</span> of the job's process group leader.
|
|
|
|
<br><dt><code>-r</code><dd>Restrict output to running jobs.
|
|
|
|
<br><dt><code>-s</code><dd>Restrict output to stopped jobs.
|
|
</dl>
|
|
|
|
<p>If <var>jobspec</var> is given,
|
|
output is restricted to information about that job.
|
|
If <var>jobspec</var> is not supplied, the status of all jobs is
|
|
listed.
|
|
|
|
<p>If the <samp><span class="option">-x</span></samp> option is supplied, <code>jobs</code> replaces any
|
|
<var>jobspec</var> found in <var>command</var> or <var>arguments</var> with the
|
|
corresponding process group <span class="sc">id</span>, and executes <var>command</var>,
|
|
passing it <var>argument</var>s, returning its exit status.
|
|
|
|
<br><dt><code>kill</code><dd><a name="index-kill-259"></a>
|
|
<pre class="example"> kill [-s <var>sigspec</var>] [-n <var>signum</var>] [-<var>sigspec</var>] <var>jobspec</var> or <var>pid</var>
|
|
kill -l [<var>exit_status</var>]
|
|
</pre>
|
|
<p>Send a signal specified by <var>sigspec</var> or <var>signum</var> to the process
|
|
named by job specification <var>jobspec</var> or process <span class="sc">id</span> <var>pid</var>.
|
|
<var>sigspec</var> is either a case-insensitive signal name such as
|
|
<code>SIGINT</code> (with or without the <code>SIG</code> prefix)
|
|
or a signal number; <var>signum</var> is a signal number.
|
|
If <var>sigspec</var> and <var>signum</var> are not present, <code>SIGTERM</code> is used.
|
|
The <samp><span class="option">-l</span></samp> option lists the signal names.
|
|
If any arguments are supplied when <samp><span class="option">-l</span></samp> is given, the names of the
|
|
signals corresponding to the arguments are listed, and the return status
|
|
is zero.
|
|
<var>exit_status</var> 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.
|
|
|
|
<br><dt><code>wait</code><dd><a name="index-wait-260"></a>
|
|
<pre class="example"> wait [<var>jobspec</var> or <var>pid</var> ...]
|
|
</pre>
|
|
<p>Wait until the child process specified by each process <span class="sc">id</span> <var>pid</var>
|
|
or job specification <var>jobspec</var> 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 neither <var>jobspec</var> nor <var>pid</var> specifies an active child process
|
|
of the shell, the return status is 127.
|
|
|
|
<br><dt><code>disown</code><dd><a name="index-disown-261"></a>
|
|
<pre class="example"> disown [-ar] [-h] [<var>jobspec</var> ...]
|
|
</pre>
|
|
<p>Without options, each <var>jobspec</var> is removed from the table of
|
|
active jobs.
|
|
If the <samp><span class="option">-h</span></samp> option is given, the job is not removed from the table,
|
|
but is marked so that <code>SIGHUP</code> is not sent to the job if the shell
|
|
receives a <code>SIGHUP</code>.
|
|
If <var>jobspec</var> is not present, and neither the <samp><span class="option">-a</span></samp> nor <samp><span class="option">-r</span></samp>
|
|
option is supplied, the current job is used.
|
|
If no <var>jobspec</var> is supplied, the <samp><span class="option">-a</span></samp> option means to remove or
|
|
mark all jobs; the <samp><span class="option">-r</span></samp> option without a <var>jobspec</var>
|
|
argument restricts operation to running jobs.
|
|
|
|
<br><dt><code>suspend</code><dd><a name="index-suspend-262"></a>
|
|
<pre class="example"> suspend [-f]
|
|
</pre>
|
|
<p>Suspend the execution of this shell until it receives a
|
|
<code>SIGCONT</code> signal. The <samp><span class="option">-f</span></samp> option means to suspend
|
|
even if the shell is a login shell.
|
|
|
|
</dl>
|
|
|
|
<p>When job control is not active, the <code>kill</code> and <code>wait</code>
|
|
builtins do not accept <var>jobspec</var> arguments. They must be
|
|
supplied process <span class="sc">id</span>s.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Job-Control-Variables"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Job-Control-Builtins">Job Control Builtins</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Job-Control">Job Control</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">7.3 Job Control Variables</h3>
|
|
|
|
<dl>
|
|
<dt><code>auto_resume</code><a name="index-auto_005fresume-263"></a><dd>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 `<samp><span class="samp">exact</span></samp>',
|
|
the string supplied must match the name of a stopped job exactly;
|
|
if set to `<samp><span class="samp">substring</span></samp>',
|
|
the string supplied needs to match a substring of the name of a
|
|
stopped job. The `<samp><span class="samp">substring</span></samp>' value provides functionality
|
|
analogous to the `<samp><span class="samp">%?</span></samp>' job <span class="sc">id</span> (see <a href="#Job-Control-Basics">Job Control Basics</a>).
|
|
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 `<samp><span class="samp">%</span></samp>' job <span class="sc">id</span>.
|
|
|
|
</dl>
|
|
|
|
<p><a name="index-Readline_002c-how-to-use-264"></a>
|
|
|
|
<!-- %**start of header (This is for running Texinfo on a region.) -->
|
|
<!-- %**end of header (This is for running Texinfo on a region.) -->
|
|
<!-- If you are including this manual as an appendix, then set the -->
|
|
<!-- variable readline-appendix. -->
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Command-Line-Editing"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Installing-Bash">Installing Bash</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Using-History-Interactively">Using History Interactively</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">8 Command Line Editing</h2>
|
|
|
|
<p>This chapter describes the basic features of the <span class="sc">gnu</span>
|
|
command line editing interface.
|
|
Command line editing is provided by the Readline library, which is
|
|
used by several different programs, including Bash.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Introduction-and-Notation">Introduction and Notation</a>: Notation used in this text.
|
|
<li><a accesskey="2" href="#Readline-Interaction">Readline Interaction</a>: The minimum set of commands for editing a line.
|
|
<li><a accesskey="3" href="#Readline-Init-File">Readline Init File</a>: Customizing Readline from a user's view.
|
|
<li><a accesskey="4" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>: A description of most of the Readline commands
|
|
available for binding
|
|
<li><a accesskey="5" href="#Readline-vi-Mode">Readline vi Mode</a>: A short description of how to make Readline
|
|
behave like the vi editor.
|
|
|
|
<li><a accesskey="6" href="#Programmable-Completion">Programmable Completion</a>: How to specify the possible completions for
|
|
a specific command.
|
|
<li><a accesskey="7" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>: Builtin commands to specify how to
|
|
complete arguments for a particular command.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Introduction-and-Notation"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Readline-Interaction">Readline Interaction</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Command-Line-Editing">Command Line Editing</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">8.1 Introduction to Line Editing</h3>
|
|
|
|
<p>The following paragraphs describe the notation used to represent
|
|
keystrokes.
|
|
|
|
<p>The text <kbd>C-k</kbd> is read as `Control-K' and describes the character
|
|
produced when the <k> key is pressed while the Control key
|
|
is depressed.
|
|
|
|
<p>The text <kbd>M-k</kbd> 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.
|
|
|
|
<p>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>
|
|
<em>first</em>, and then typing <k>.
|
|
Either process is known as <dfn>metafying</dfn> the <k> key.
|
|
|
|
<p>The text <kbd>M-C-k</kbd> is read as `Meta-Control-k' and describes the
|
|
character produced by <dfn>metafying</dfn> <kbd>C-k</kbd>.
|
|
|
|
<p>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
|
|
(see <a href="#Readline-Init-File">Readline Init File</a>).
|
|
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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-Interaction"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Readline-Init-File">Readline Init File</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Introduction-and-Notation">Introduction and Notation</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Command-Line-Editing">Command Line Editing</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">8.2 Readline Interaction</h3>
|
|
|
|
<p><a name="index-interaction_002c-readline-265"></a>
|
|
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.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Readline-Bare-Essentials">Readline Bare Essentials</a>: The least you need to know about Readline.
|
|
<li><a accesskey="2" href="#Readline-Movement-Commands">Readline Movement Commands</a>: Moving about the input line.
|
|
<li><a accesskey="3" href="#Readline-Killing-Commands">Readline Killing Commands</a>: How to delete text, and how to get it back!
|
|
<li><a accesskey="4" href="#Readline-Arguments">Readline Arguments</a>: Giving numeric arguments to commands.
|
|
<li><a accesskey="5" href="#Searching">Searching</a>: Searching through previous lines.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-Bare-Essentials"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Readline-Movement-Commands">Readline Movement Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Interaction">Readline Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.2.1 Readline Bare Essentials</h4>
|
|
|
|
<p><a name="index-notation_002c-readline-266"></a><a name="index-command-editing-267"></a><a name="index-editing-command-lines-268"></a>
|
|
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.
|
|
|
|
<p>Sometimes you may mistype a character, and
|
|
not notice the error until you have typed several other characters. In
|
|
that case, you can type <kbd>C-b</kbd> to move the cursor to the left, and then
|
|
correct your mistake. Afterwards, you can move the cursor to the right
|
|
with <kbd>C-f</kbd>.
|
|
|
|
<p>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.
|
|
|
|
<dl>
|
|
<dt><kbd>C-b</kbd><dd>Move back one character.
|
|
<br><dt><kbd>C-f</kbd><dd>Move forward one character.
|
|
<br><dt><DEL> or <Backspace><dd>Delete the character to the left of the cursor.
|
|
<br><dt><kbd>C-d</kbd><dd>Delete the character underneath the cursor.
|
|
<br><dt>Printing characters<!-- /@w --><dd>Insert the character into the line at the cursor.
|
|
<br><dt><kbd>C-_</kbd> or <kbd>C-x C-u</kbd><dd>Undo the last editing command. You can undo all the way back to an
|
|
empty line.
|
|
</dl>
|
|
|
|
<p class="noindent">(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 <kbd>C-d</kbd>, rather
|
|
than the character to the left of the cursor.)
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-Movement-Commands"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Readline-Killing-Commands">Readline Killing Commands</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-Bare-Essentials">Readline Bare Essentials</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Interaction">Readline Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.2.2 Readline Movement Commands</h4>
|
|
|
|
<p>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 <kbd>C-b</kbd>, <kbd>C-f</kbd>,
|
|
<kbd>C-d</kbd>, and <DEL>. Here are some commands for moving more rapidly
|
|
about the line.
|
|
|
|
<dl>
|
|
<dt><kbd>C-a</kbd><dd>Move to the start of the line.
|
|
<br><dt><kbd>C-e</kbd><dd>Move to the end of the line.
|
|
<br><dt><kbd>M-f</kbd><dd>Move forward a word, where a word is composed of letters and digits.
|
|
<br><dt><kbd>M-b</kbd><dd>Move backward a word.
|
|
<br><dt><kbd>C-l</kbd><dd>Clear the screen, reprinting the current line at the top.
|
|
</dl>
|
|
|
|
<p>Notice how <kbd>C-f</kbd> moves forward a character, while <kbd>M-f</kbd> moves
|
|
forward a word. It is a loose convention that control keystrokes
|
|
operate on characters while meta keystrokes operate on words.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-Killing-Commands"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Readline-Arguments">Readline Arguments</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-Movement-Commands">Readline Movement Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Interaction">Readline Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.2.3 Readline Killing Commands</h4>
|
|
|
|
<p><a name="index-killing-text-269"></a><a name="index-yanking-text-270"></a>
|
|
<dfn>Killing</dfn> text means to delete the text from the line, but to save
|
|
it away for later use, usually by <dfn>yanking</dfn> (re-inserting)
|
|
it back into the line.
|
|
(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
|
|
|
|
<p>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.
|
|
|
|
<p>When you use a kill command, the text is saved in a <dfn>kill-ring</dfn>.
|
|
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.
|
|
<a name="index-kill-ring-271"></a>
|
|
Here is the list of commands for killing text.
|
|
|
|
<dl>
|
|
<dt><kbd>C-k</kbd><dd>Kill the text from the current cursor position to the end of the line.
|
|
|
|
<br><dt><kbd>M-d</kbd><dd>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 <kbd>M-f</kbd>.
|
|
|
|
<br><dt><kbd>M-<DEL></kbd><dd>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 <kbd>M-b</kbd>.
|
|
|
|
<br><dt><kbd>C-w</kbd><dd>Kill from the cursor to the previous whitespace. This is different than
|
|
<kbd>M-<DEL></kbd> because the word boundaries differ.
|
|
|
|
</dl>
|
|
|
|
<p>Here is how to <dfn>yank</dfn> the text back into the line. Yanking
|
|
means to copy the most-recently-killed text from the kill buffer.
|
|
|
|
<dl>
|
|
<dt><kbd>C-y</kbd><dd>Yank the most recently killed text back into the buffer at the cursor.
|
|
|
|
<br><dt><kbd>M-y</kbd><dd>Rotate the kill-ring, and yank the new top. You can only do this if
|
|
the prior command is <kbd>C-y</kbd> or <kbd>M-y</kbd>.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-Arguments"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Searching">Searching</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-Killing-Commands">Readline Killing Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Interaction">Readline Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.2.4 Readline Arguments</h4>
|
|
|
|
<p>You can pass numeric arguments to Readline commands. Sometimes the
|
|
argument acts as a repeat count, other times it is the <i>sign</i> 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 `<samp><span class="samp">M-- C-k</span></samp>'.
|
|
|
|
<p>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 (`<samp><span class="samp">-</span></samp>'), 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 <kbd>C-d</kbd> command an argument of 10, you could type `<samp><span class="samp">M-1 0 C-d</span></samp>',
|
|
which will delete the next ten characters on the input line.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Searching"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-Arguments">Readline Arguments</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Interaction">Readline Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.2.5 Searching for Commands in the History</h4>
|
|
|
|
<p>Readline provides commands for searching through the command history
|
|
(see <a href="#Bash-History-Facilities">Bash History Facilities</a>)
|
|
for lines containing a specified string.
|
|
There are two search modes: <dfn>incremental</dfn> and <dfn>non-incremental</dfn>.
|
|
|
|
<p>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
|
|
<kbd>C-r</kbd>. Typing <kbd>C-s</kbd> searches forward through the history.
|
|
The characters present in the value of the <code>isearch-terminators</code> variable
|
|
are used to terminate an incremental search.
|
|
If that variable has not been assigned a value, the <ESC> and
|
|
<kbd>C-J</kbd> characters will terminate an incremental search.
|
|
<kbd>C-g</kbd> 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.
|
|
|
|
<p>To find other matching entries in the history list, type <kbd>C-r</kbd> or
|
|
<kbd>C-s</kbd> 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.
|
|
|
|
<p>Readline remembers the last incremental search string. If two
|
|
<kbd>C-r</kbd>s are typed without any intervening characters defining a new
|
|
search string, any remembered search string is used.
|
|
|
|
<p>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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-Init-File"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-Interaction">Readline Interaction</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Command-Line-Editing">Command Line Editing</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">8.3 Readline Init File</h3>
|
|
|
|
<p><a name="index-initialization-file_002c-readline-272"></a>
|
|
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 <dfn>inputrc</dfn> file, conventionally in his home directory.
|
|
The name of this
|
|
file is taken from the value of the shell variable <samp><span class="env">INPUTRC</span></samp>. If
|
|
that variable is unset, the default is <samp><span class="file">~/.inputrc</span></samp>. If that
|
|
file does not exist or cannot be read, the ultimate default is
|
|
<samp><span class="file">/etc/inputrc</span></samp>.
|
|
|
|
<p>When a program which uses the Readline library starts up, the
|
|
init file is read, and the key bindings are set.
|
|
|
|
<p>In addition, the <code>C-x C-r</code> command re-reads this init file, thus
|
|
incorporating any changes that you might have made to it.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Readline-Init-File-Syntax">Readline Init File Syntax</a>: Syntax for the commands in the inputrc file.
|
|
|
|
<li><a accesskey="2" href="#Conditional-Init-Constructs">Conditional Init Constructs</a>: Conditional key bindings in the inputrc file.
|
|
|
|
<li><a accesskey="3" href="#Sample-Init-File">Sample Init File</a>: An example inputrc file.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-Init-File-Syntax"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Conditional-Init-Constructs">Conditional Init Constructs</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Init-File">Readline Init File</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.3.1 Readline Init File Syntax</h4>
|
|
|
|
<p>There are only a few basic constructs allowed in the
|
|
Readline init file. Blank lines are ignored.
|
|
Lines beginning with a `<samp><span class="samp">#</span></samp>' are comments.
|
|
Lines beginning with a `<samp><span class="samp">$</span></samp>' indicate conditional
|
|
constructs (see <a href="#Conditional-Init-Constructs">Conditional Init Constructs</a>). Other lines
|
|
denote variable settings and key bindings.
|
|
|
|
<dl>
|
|
<dt>Variable Settings<dd>You can modify the run-time behavior of Readline by
|
|
altering the values of variables in Readline
|
|
using the <code>set</code> command within the init file.
|
|
The syntax is simple:
|
|
|
|
<pre class="example"> set <var>variable</var> <var>value</var>
|
|
</pre>
|
|
<p class="noindent">Here, for example, is how to
|
|
change from the default Emacs-like key binding to use
|
|
<code>vi</code> line editing commands:
|
|
|
|
<pre class="example"> set editing-mode vi
|
|
</pre>
|
|
<p>Variable names and values, where appropriate, are recognized without regard
|
|
to case. Unrecognized variable names are ignored.
|
|
|
|
<p>Boolean variables (those that can be set to on or off) are set to on if
|
|
the value is null or empty, <var>on</var> (case-insensitive), or 1. Any other
|
|
value results in the variable being set to off.
|
|
|
|
<p>The <code>bind -V</code><!-- /@w --> command lists the current Readline variable names
|
|
and values. See <a href="#Bash-Builtins">Bash Builtins</a>.
|
|
|
|
<p>A great deal of run-time behavior is changeable with the following
|
|
variables.
|
|
|
|
<p><a name="index-variables_002c-readline-273"></a>
|
|
<dl>
|
|
<dt><code>bell-style</code><dd><a name="index-bell_002dstyle-274"></a>Controls what happens when Readline wants to ring the terminal bell.
|
|
If set to `<samp><span class="samp">none</span></samp>', Readline never rings the bell. If set to
|
|
`<samp><span class="samp">visible</span></samp>', Readline uses a visible bell if one is available.
|
|
If set to `<samp><span class="samp">audible</span></samp>' (the default), Readline attempts to ring
|
|
the terminal's bell.
|
|
|
|
<br><dt><code>bind-tty-special-chars</code><dd><a name="index-bind_002dtty_002dspecial_002dchars-275"></a>If set to `<samp><span class="samp">on</span></samp>', Readline attempts to bind the control characters
|
|
treated specially by the kernel's terminal driver to their Readline
|
|
equivalents.
|
|
|
|
<br><dt><code>comment-begin</code><dd><a name="index-comment_002dbegin-276"></a>The string to insert at the beginning of the line when the
|
|
<code>insert-comment</code> command is executed. The default value
|
|
is <code>"#"</code>.
|
|
|
|
<br><dt><code>completion-ignore-case</code><dd>If set to `<samp><span class="samp">on</span></samp>', Readline performs filename matching and completion
|
|
in a case-insensitive fashion.
|
|
The default value is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>completion-query-items</code><dd><a name="index-completion_002dquery_002ditems-277"></a>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 <code>100</code>.
|
|
|
|
<br><dt><code>convert-meta</code><dd><a name="index-convert_002dmeta-278"></a>If set to `<samp><span class="samp">on</span></samp>', Readline will convert characters with the
|
|
eighth bit set to an <span class="sc">ascii</span> key sequence by stripping the eighth
|
|
bit and prefixing an <ESC> character, converting them to a
|
|
meta-prefixed key sequence. The default value is `<samp><span class="samp">on</span></samp>'.
|
|
|
|
<br><dt><code>disable-completion</code><dd><a name="index-disable_002dcompletion-279"></a>If set to `<samp><span class="samp">On</span></samp>', Readline will inhibit word completion.
|
|
Completion characters will be inserted into the line as if they had
|
|
been mapped to <code>self-insert</code>. The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>editing-mode</code><dd><a name="index-editing_002dmode-280"></a>The <code>editing-mode</code> 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 `<samp><span class="samp">emacs</span></samp>' or `<samp><span class="samp">vi</span></samp>'.
|
|
|
|
<br><dt><code>enable-keypad</code><dd><a name="index-enable_002dkeypad-281"></a>When set to `<samp><span class="samp">on</span></samp>', Readline will try to enable the application
|
|
keypad when it is called. Some systems need this to enable the
|
|
arrow keys. The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>expand-tilde</code><dd><a name="index-expand_002dtilde-282"></a>If set to `<samp><span class="samp">on</span></samp>', tilde expansion is performed when Readline
|
|
attempts word completion. The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>history-preserve-point</code><dd><a name="index-history_002dpreserve_002dpoint-283"></a>If set to `<samp><span class="samp">on</span></samp>', the history code attempts to place point at the
|
|
same location on each history line retrieved with <code>previous-history</code>
|
|
or <code>next-history</code>. The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>horizontal-scroll-mode</code><dd><a name="index-horizontal_002dscroll_002dmode-284"></a>This variable can be set to either `<samp><span class="samp">on</span></samp>' or `<samp><span class="samp">off</span></samp>'. Setting it
|
|
to `<samp><span class="samp">on</span></samp>' 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 `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>input-meta</code><dd><a name="index-input_002dmeta-285"></a><a name="index-meta_002dflag-286"></a>If set to `<samp><span class="samp">on</span></samp>', 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 `<samp><span class="samp">off</span></samp>'. The name <code>meta-flag</code> is a
|
|
synonym for this variable.
|
|
|
|
<br><dt><code>isearch-terminators</code><dd><a name="index-isearch_002dterminators-287"></a>The string of characters that should terminate an incremental search without
|
|
subsequently executing the character as a command (see <a href="#Searching">Searching</a>).
|
|
If this variable has not been given a value, the characters <ESC> and
|
|
<kbd>C-J</kbd> will terminate an incremental search.
|
|
|
|
<br><dt><code>keymap</code><dd><a name="index-keymap-288"></a>Sets Readline's idea of the current keymap for key binding commands.
|
|
Acceptable <code>keymap</code> names are
|
|
<code>emacs</code>,
|
|
<code>emacs-standard</code>,
|
|
<code>emacs-meta</code>,
|
|
<code>emacs-ctlx</code>,
|
|
<code>vi</code>,
|
|
<code>vi-move</code>,
|
|
<code>vi-command</code>, and
|
|
<code>vi-insert</code>.
|
|
<code>vi</code> is equivalent to <code>vi-command</code>; <code>emacs</code> is
|
|
equivalent to <code>emacs-standard</code>. The default value is <code>emacs</code>.
|
|
The value of the <code>editing-mode</code> variable also affects the
|
|
default keymap.
|
|
|
|
<br><dt><code>mark-directories</code><dd>If set to `<samp><span class="samp">on</span></samp>', completed directory names have a slash
|
|
appended. The default is `<samp><span class="samp">on</span></samp>'.
|
|
|
|
<br><dt><code>mark-modified-lines</code><dd><a name="index-mark_002dmodified_002dlines-289"></a>This variable, when set to `<samp><span class="samp">on</span></samp>', causes Readline to display an
|
|
asterisk (`<samp><span class="samp">*</span></samp>') at the start of history lines which have been modified.
|
|
This variable is `<samp><span class="samp">off</span></samp>' by default.
|
|
|
|
<br><dt><code>mark-symlinked-directories</code><dd><a name="index-mark_002dsymlinked_002ddirectories-290"></a>If set to `<samp><span class="samp">on</span></samp>', completed names which are symbolic links
|
|
to directories have a slash appended (subject to the value of
|
|
<code>mark-directories</code>).
|
|
The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>match-hidden-files</code><dd><a name="index-match_002dhidden_002dfiles-291"></a>This variable, when set to `<samp><span class="samp">on</span></samp>', causes Readline to match files whose
|
|
names begin with a `<samp><span class="samp">.</span></samp>' (hidden files) when performing filename
|
|
completion, unless the leading `<samp><span class="samp">.</span></samp>' is
|
|
supplied by the user in the filename to be completed.
|
|
This variable is `<samp><span class="samp">on</span></samp>' by default.
|
|
|
|
<br><dt><code>output-meta</code><dd><a name="index-output_002dmeta-292"></a>If set to `<samp><span class="samp">on</span></samp>', Readline will display characters with the
|
|
eighth bit set directly rather than as a meta-prefixed escape
|
|
sequence. The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>page-completions</code><dd><a name="index-page_002dcompletions-293"></a>If set to `<samp><span class="samp">on</span></samp>', Readline uses an internal <code>more</code>-like pager
|
|
to display a screenful of possible completions at a time.
|
|
This variable is `<samp><span class="samp">on</span></samp>' by default.
|
|
|
|
<br><dt><code>print-completions-horizontally</code><dd>If set to `<samp><span class="samp">on</span></samp>', Readline will display completions with matches
|
|
sorted horizontally in alphabetical order, rather than down the screen.
|
|
The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>show-all-if-ambiguous</code><dd><a name="index-show_002dall_002dif_002dambiguous-294"></a>This alters the default behavior of the completion functions. If
|
|
set to `<samp><span class="samp">on</span></samp>',
|
|
words which have more than one possible completion cause the
|
|
matches to be listed immediately instead of ringing the bell.
|
|
The default value is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>show-all-if-unmodified</code><dd><a name="index-show_002dall_002dif_002dunmodified-295"></a>This alters the default behavior of the completion functions in
|
|
a fashion similar to <var>show-all-if-ambiguous</var>.
|
|
If set to `<samp><span class="samp">on</span></samp>',
|
|
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 `<samp><span class="samp">off</span></samp>'.
|
|
|
|
<br><dt><code>visible-stats</code><dd><a name="index-visible_002dstats-296"></a>If set to `<samp><span class="samp">on</span></samp>', a character denoting a file's type
|
|
is appended to the filename when listing possible
|
|
completions. The default is `<samp><span class="samp">off</span></samp>'.
|
|
|
|
</dl>
|
|
|
|
<br><dt>Key Bindings<dd>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.
|
|
|
|
<p>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.
|
|
|
|
<p>In addition to command names, readline allows keys to be bound
|
|
to a string that is inserted when the key is pressed (a <var>macro</var>).
|
|
|
|
<p>The <code>bind -p</code><!-- /@w --> command displays Readline function names and
|
|
bindings in a format that can put directly into an initialization file.
|
|
See <a href="#Bash-Builtins">Bash Builtins</a>.
|
|
|
|
<dl>
|
|
<dt><var>keyname</var>: <var>function-name</var> or <var>macro</var><!-- /@w --><dd><var>keyname</var> is the name of a key spelled out in English. For example:
|
|
<pre class="example"> Control-u: universal-argument
|
|
Meta-Rubout: backward-kill-word
|
|
Control-o: "> output"
|
|
</pre>
|
|
<p>In the above example, <kbd>C-u</kbd> is bound to the function
|
|
<code>universal-argument</code>,
|
|
<kbd>M-DEL</kbd> is bound to the function <code>backward-kill-word</code>, and
|
|
<kbd>C-o</kbd> is bound to run the macro
|
|
expressed on the right hand side (that is, to insert the text
|
|
`<samp><span class="samp">> output</span></samp>' into the line).
|
|
|
|
<p>A number of symbolic character names are recognized while
|
|
processing this key binding syntax:
|
|
<var>DEL</var>,
|
|
<var>ESC</var>,
|
|
<var>ESCAPE</var>,
|
|
<var>LFD</var>,
|
|
<var>NEWLINE</var>,
|
|
<var>RET</var>,
|
|
<var>RETURN</var>,
|
|
<var>RUBOUT</var>,
|
|
<var>SPACE</var>,
|
|
<var>SPC</var>,
|
|
and
|
|
<var>TAB</var>.
|
|
|
|
<br><dt>"<var>keyseq</var>": <var>function-name</var> or <var>macro</var><!-- /@w --><dd><var>keyseq</var> differs from <var>keyname</var> above in that strings
|
|
denoting an entire key sequence can be specified, by placing
|
|
the key sequence in double quotes. Some <span class="sc">gnu</span> Emacs style key
|
|
escapes can be used, as in the following example, but the
|
|
special character names are not recognized.
|
|
|
|
<pre class="example"> "\C-u": universal-argument
|
|
"\C-x\C-r": re-read-init-file
|
|
"\e[11~": "Function Key 1"
|
|
</pre>
|
|
<p>In the above example, <kbd>C-u</kbd> is again bound to the function
|
|
<code>universal-argument</code> (just as it was in the first example),
|
|
`<samp><kbd>C-x</kbd> <kbd>C-r</kbd></samp>' is bound to the function <code>re-read-init-file</code>,
|
|
and `<samp><span class="samp"><ESC> <[> <1> <1> <~></span></samp>' is bound to insert
|
|
the text `<samp><span class="samp">Function Key 1</span></samp>'.
|
|
|
|
</dl>
|
|
|
|
<p>The following <span class="sc">gnu</span> Emacs style escape sequences are available when
|
|
specifying key sequences:
|
|
|
|
<dl>
|
|
<dt><kbd>\C-</kbd><dd>control prefix
|
|
<br><dt><kbd>\M-</kbd><dd>meta prefix
|
|
<br><dt><kbd>\e</kbd><dd>an escape character
|
|
<br><dt><kbd>\\</kbd><dd>backslash
|
|
<br><dt><kbd>\"</kbd><dd><">, a double quotation mark
|
|
<br><dt><kbd>\'</kbd><dd><'>, a single quote or apostrophe
|
|
</dl>
|
|
|
|
<p>In addition to the <span class="sc">gnu</span> Emacs style escape sequences, a second
|
|
set of backslash escapes is available:
|
|
|
|
<dl>
|
|
<dt><code>\a</code><dd>alert (bell)
|
|
<br><dt><code>\b</code><dd>backspace
|
|
<br><dt><code>\d</code><dd>delete
|
|
<br><dt><code>\f</code><dd>form feed
|
|
<br><dt><code>\n</code><dd>newline
|
|
<br><dt><code>\r</code><dd>carriage return
|
|
<br><dt><code>\t</code><dd>horizontal tab
|
|
<br><dt><code>\v</code><dd>vertical tab
|
|
<br><dt><code>\</code><var>nnn</var><dd>the eight-bit character whose value is the octal value <var>nnn</var>
|
|
(one to three digits)
|
|
<br><dt><code>\x</code><var>HH</var><dd>the eight-bit character whose value is the hexadecimal value <var>HH</var>
|
|
(one or two hex digits)
|
|
</dl>
|
|
|
|
<p>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 `<samp><span class="samp">"</span></samp>' and `<samp><span class="samp">'</span></samp>'.
|
|
For example, the following binding will make `<samp><kbd>C-x</kbd><span class="samp"> \</span></samp>'
|
|
insert a single `<samp><span class="samp">\</span></samp>' into the line:
|
|
<pre class="example"> "\C-x\\": "\\"
|
|
</pre>
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Conditional-Init-Constructs"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Sample-Init-File">Sample Init File</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-Init-File-Syntax">Readline Init File Syntax</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Init-File">Readline Init File</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.3.2 Conditional Init Constructs</h4>
|
|
|
|
<p>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.
|
|
|
|
<dl>
|
|
<dt><code>$if</code><dd>The <code>$if</code> 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.
|
|
|
|
<dl>
|
|
<dt><code>mode</code><dd>The <code>mode=</code> form of the <code>$if</code> directive is used to test
|
|
whether Readline is in <code>emacs</code> or <code>vi</code> mode.
|
|
This may be used in conjunction
|
|
with the `<samp><span class="samp">set keymap</span></samp>' command, for instance, to set bindings in
|
|
the <code>emacs-standard</code> and <code>emacs-ctlx</code> keymaps only if
|
|
Readline is starting out in <code>emacs</code> mode.
|
|
|
|
<br><dt><code>term</code><dd>The <code>term=</code> 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
|
|
`<samp><span class="samp">=</span></samp>' is tested against both the full name of the terminal and
|
|
the portion of the terminal name before the first `<samp><span class="samp">-</span></samp>'. This
|
|
allows <code>sun</code> to match both <code>sun</code> and <code>sun-cmd</code>,
|
|
for instance.
|
|
|
|
<br><dt><code>application</code><dd>The <var>application</var> construct is used to include
|
|
application-specific settings. Each program using the Readline
|
|
library sets the <var>application name</var>, 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:
|
|
<pre class="example"> $if Bash
|
|
# Quote the current or previous word
|
|
"\C-xq": "\eb\"\ef\""
|
|
$endif
|
|
</pre>
|
|
</dl>
|
|
|
|
<br><dt><code>$endif</code><dd>This command, as seen in the previous example, terminates an
|
|
<code>$if</code> command.
|
|
|
|
<br><dt><code>$else</code><dd>Commands in this branch of the <code>$if</code> directive are executed if
|
|
the test fails.
|
|
|
|
<br><dt><code>$include</code><dd>This directive takes a single filename as an argument and reads commands
|
|
and bindings from that file.
|
|
For example, the following directive reads from <samp><span class="file">/etc/inputrc</span></samp>:
|
|
<pre class="example"> $include /etc/inputrc
|
|
</pre>
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Sample-Init-File"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Conditional-Init-Constructs">Conditional Init Constructs</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Readline-Init-File">Readline Init File</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.3.3 Sample Init File</h4>
|
|
|
|
<p>Here is an example of an <var>inputrc</var> file. This illustrates key
|
|
binding, variable assignment, and conditional syntax.
|
|
|
|
<pre class="example">
|
|
# 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
|
|
</pre>
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bindable-Readline-Commands"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Readline-vi-Mode">Readline vi Mode</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-Init-File">Readline Init File</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Command-Line-Editing">Command Line Editing</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">8.4 Bindable Readline Commands</h3>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Commands-For-Moving">Commands For Moving</a>: Moving about the line.
|
|
<li><a accesskey="2" href="#Commands-For-History">Commands For History</a>: Getting at previous lines.
|
|
<li><a accesskey="3" href="#Commands-For-Text">Commands For Text</a>: Commands for changing text.
|
|
<li><a accesskey="4" href="#Commands-For-Killing">Commands For Killing</a>: Commands for killing and yanking.
|
|
<li><a accesskey="5" href="#Numeric-Arguments">Numeric Arguments</a>: Specifying numeric arguments, repeat counts.
|
|
<li><a accesskey="6" href="#Commands-For-Completion">Commands For Completion</a>: Getting Readline to do the typing for you.
|
|
<li><a accesskey="7" href="#Keyboard-Macros">Keyboard Macros</a>: Saving and re-executing typed characters
|
|
<li><a accesskey="8" href="#Miscellaneous-Commands">Miscellaneous Commands</a>: Other miscellaneous commands.
|
|
</ul>
|
|
|
|
<p>This section describes Readline commands that may be bound to key
|
|
sequences.
|
|
You can list your key bindings by executing
|
|
<code>bind -P</code><!-- /@w --> or, for a more terse format, suitable for an
|
|
<var>inputrc</var> file, <code>bind -p</code><!-- /@w -->. (See <a href="#Bash-Builtins">Bash Builtins</a>.)
|
|
Command names without an accompanying key sequence are unbound by default.
|
|
|
|
<p>In the following descriptions, <dfn>point</dfn> refers to the current cursor
|
|
position, and <dfn>mark</dfn> refers to a cursor position saved by the
|
|
<code>set-mark</code> command.
|
|
The text between the point and mark is referred to as the <dfn>region</dfn>.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Commands-For-Moving"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Commands-For-History">Commands For History</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.1 Commands For Moving</h4>
|
|
|
|
<dl>
|
|
<dt><code>beginning-of-line (C-a)</code><a name="index-beginning_002dof_002dline-_0028C_002da_0029-297"></a><dd>Move to the start of the current line.
|
|
|
|
<br><dt><code>end-of-line (C-e)</code><a name="index-end_002dof_002dline-_0028C_002de_0029-298"></a><dd>Move to the end of the line.
|
|
|
|
<br><dt><code>forward-char (C-f)</code><a name="index-forward_002dchar-_0028C_002df_0029-299"></a><dd>Move forward a character.
|
|
|
|
<br><dt><code>backward-char (C-b)</code><a name="index-backward_002dchar-_0028C_002db_0029-300"></a><dd>Move back a character.
|
|
|
|
<br><dt><code>forward-word (M-f)</code><a name="index-forward_002dword-_0028M_002df_0029-301"></a><dd>Move forward to the end of the next word. Words are composed of
|
|
letters and digits.
|
|
|
|
<br><dt><code>backward-word (M-b)</code><a name="index-backward_002dword-_0028M_002db_0029-302"></a><dd>Move back to the start of the current or previous word. Words are
|
|
composed of letters and digits.
|
|
|
|
<br><dt><code>clear-screen (C-l)</code><a name="index-clear_002dscreen-_0028C_002dl_0029-303"></a><dd>Clear the screen and redraw the current line,
|
|
leaving the current line at the top of the screen.
|
|
|
|
<br><dt><code>redraw-current-line ()</code><a name="index-redraw_002dcurrent_002dline-_0028_0029-304"></a><dd>Refresh the current line. By default, this is unbound.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Commands-For-History"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Commands-For-Text">Commands For Text</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Commands-For-Moving">Commands For Moving</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.2 Commands For Manipulating The History</h4>
|
|
|
|
<dl>
|
|
<dt><code>accept-line (Newline or Return)</code><a name="index-accept_002dline-_0028Newline-or-Return_0029-305"></a><dd>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 <samp><span class="env">HISTCONTROL</span></samp> and <samp><span class="env">HISTIGNORE</span></samp> variables.
|
|
If this line is a modified history line, then restore the history line
|
|
to its original state.
|
|
|
|
<br><dt><code>previous-history (C-p)</code><a name="index-previous_002dhistory-_0028C_002dp_0029-306"></a><dd>Move `back' through the history list, fetching the previous command.
|
|
|
|
<br><dt><code>next-history (C-n)</code><a name="index-next_002dhistory-_0028C_002dn_0029-307"></a><dd>Move `forward' through the history list, fetching the next command.
|
|
|
|
<br><dt><code>beginning-of-history (M-<)</code><a name="index-beginning_002dof_002dhistory-_0028M_002d_003c_0029-308"></a><dd>Move to the first line in the history.
|
|
|
|
<br><dt><code>end-of-history (M->)</code><a name="index-end_002dof_002dhistory-_0028M_002d_003e_0029-309"></a><dd>Move to the end of the input history, i.e., the line currently
|
|
being entered.
|
|
|
|
<br><dt><code>reverse-search-history (C-r)</code><a name="index-reverse_002dsearch_002dhistory-_0028C_002dr_0029-310"></a><dd>Search backward starting at the current line and moving `up' through
|
|
the history as necessary. This is an incremental search.
|
|
|
|
<br><dt><code>forward-search-history (C-s)</code><a name="index-forward_002dsearch_002dhistory-_0028C_002ds_0029-311"></a><dd>Search forward starting at the current line and moving `down' through
|
|
the the history as necessary. This is an incremental search.
|
|
|
|
<br><dt><code>non-incremental-reverse-search-history (M-p)</code><a name="index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029-312"></a><dd>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.
|
|
|
|
<br><dt><code>non-incremental-forward-search-history (M-n)</code><a name="index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029-313"></a><dd>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.
|
|
|
|
<br><dt><code>history-search-forward ()</code><a name="index-history_002dsearch_002dforward-_0028_0029-314"></a><dd>Search forward through the history for the string of characters
|
|
between the start of the current line and the point.
|
|
This is a non-incremental search.
|
|
By default, this command is unbound.
|
|
|
|
<br><dt><code>history-search-backward ()</code><a name="index-history_002dsearch_002dbackward-_0028_0029-315"></a><dd>Search backward through the history for the string of characters
|
|
between the start of the current line and the point. This
|
|
is a non-incremental search. By default, this command is unbound.
|
|
|
|
<br><dt><code>yank-nth-arg (M-C-y)</code><a name="index-yank_002dnth_002darg-_0028M_002dC_002dy_0029-316"></a><dd>Insert the first argument to the previous command (usually
|
|
the second word on the previous line) at point.
|
|
With an argument <var>n</var>,
|
|
insert the <var>n</var>th word from the previous command (the words
|
|
in the previous command begin with word 0). A negative argument
|
|
inserts the <var>n</var>th word from the end of the previous command.
|
|
Once the argument <var>n</var> is computed, the argument is extracted
|
|
as if the `<samp><span class="samp">!</span><var>n</var></samp>' history expansion had been specified.
|
|
|
|
<br><dt><code>yank-last-arg (M-. or M-_)</code><a name="index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029-317"></a><dd>Insert last argument to the previous command (the last word of the
|
|
previous history entry). With an
|
|
argument, behave exactly like <code>yank-nth-arg</code>.
|
|
Successive calls to <code>yank-last-arg</code> move back through the history
|
|
list, inserting the last argument of each line in turn.
|
|
The history expansion facilities are used to extract the last argument,
|
|
as if the `<samp><span class="samp">!$</span></samp>' history expansion had been specified.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Commands-For-Text"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Commands-For-Killing">Commands For Killing</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Commands-For-History">Commands For History</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.3 Commands For Changing Text</h4>
|
|
|
|
<dl>
|
|
<dt><code>delete-char (C-d)</code><a name="index-delete_002dchar-_0028C_002dd_0029-318"></a><dd>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 <code>delete-char</code>, then
|
|
return <span class="sc">eof</span>.
|
|
|
|
<br><dt><code>backward-delete-char (Rubout)</code><a name="index-backward_002ddelete_002dchar-_0028Rubout_0029-319"></a><dd>Delete the character behind the cursor. A numeric argument means
|
|
to kill the characters instead of deleting them.
|
|
|
|
<br><dt><code>forward-backward-delete-char ()</code><a name="index-forward_002dbackward_002ddelete_002dchar-_0028_0029-320"></a><dd>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.
|
|
|
|
<br><dt><code>quoted-insert (C-q or C-v)</code><a name="index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029-321"></a><dd>Add the next character typed to the line verbatim. This is
|
|
how to insert key sequences like <kbd>C-q</kbd>, for example.
|
|
|
|
<br><dt><code>self-insert (a, b, A, 1, !, ...)</code><a name="index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_0040dots_007b_007d_0029-322"></a><dd>Insert yourself.
|
|
|
|
<br><dt><code>transpose-chars (C-t)</code><a name="index-transpose_002dchars-_0028C_002dt_0029-323"></a><dd>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.
|
|
|
|
<br><dt><code>transpose-words (M-t)</code><a name="index-transpose_002dwords-_0028M_002dt_0029-324"></a><dd>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.
|
|
|
|
<br><dt><code>upcase-word (M-u)</code><a name="index-upcase_002dword-_0028M_002du_0029-325"></a><dd>Uppercase the current (or following) word. With a negative argument,
|
|
uppercase the previous word, but do not move the cursor.
|
|
|
|
<br><dt><code>downcase-word (M-l)</code><a name="index-downcase_002dword-_0028M_002dl_0029-326"></a><dd>Lowercase the current (or following) word. With a negative argument,
|
|
lowercase the previous word, but do not move the cursor.
|
|
|
|
<br><dt><code>capitalize-word (M-c)</code><a name="index-capitalize_002dword-_0028M_002dc_0029-327"></a><dd>Capitalize the current (or following) word. With a negative argument,
|
|
capitalize the previous word, but do not move the cursor.
|
|
|
|
<br><dt><code>overwrite-mode ()</code><a name="index-overwrite_002dmode-_0028_0029-328"></a><dd>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
|
|
<code>emacs</code> mode; <code>vi</code> mode does overwrite differently.
|
|
Each call to <code>readline()</code> starts in insert mode.
|
|
|
|
<p>In overwrite mode, characters bound to <code>self-insert</code> replace
|
|
the text at point rather than pushing the text to the right.
|
|
Characters bound to <code>backward-delete-char</code> replace the character
|
|
before point with a space.
|
|
|
|
<p>By default, this command is unbound.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Commands-For-Killing"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Numeric-Arguments">Numeric Arguments</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Commands-For-Text">Commands For Text</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.4 Killing And Yanking</h4>
|
|
|
|
<dl>
|
|
<dt><code>kill-line (C-k)</code><a name="index-kill_002dline-_0028C_002dk_0029-329"></a><dd>Kill the text from point to the end of the line.
|
|
|
|
<br><dt><code>backward-kill-line (C-x Rubout)</code><a name="index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029-330"></a><dd>Kill backward to the beginning of the line.
|
|
|
|
<br><dt><code>unix-line-discard (C-u)</code><a name="index-unix_002dline_002ddiscard-_0028C_002du_0029-331"></a><dd>Kill backward from the cursor to the beginning of the current line.
|
|
|
|
<br><dt><code>kill-whole-line ()</code><a name="index-kill_002dwhole_002dline-_0028_0029-332"></a><dd>Kill all characters on the current line, no matter where point is.
|
|
By default, this is unbound.
|
|
|
|
<br><dt><code>kill-word (M-d)</code><a name="index-kill_002dword-_0028M_002dd_0029-333"></a><dd>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 <code>forward-word</code>.
|
|
|
|
<br><dt><code>backward-kill-word (M-<DEL>)</code><a name="index-backward_002dkill_002dword-_0028M_002d_0040key_007bDEL_007d_0029-334"></a><dd>Kill the word behind point.
|
|
Word boundaries are the same as <code>backward-word</code>.
|
|
|
|
<br><dt><code>unix-word-rubout (C-w)</code><a name="index-unix_002dword_002drubout-_0028C_002dw_0029-335"></a><dd>Kill the word behind point, using white space as a word boundary.
|
|
The killed text is saved on the kill-ring.
|
|
|
|
<br><dt><code>unix-filename-rubout ()</code><a name="index-unix_002dfilename_002drubout-_0028_0029-336"></a><dd>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.
|
|
|
|
<br><dt><code>delete-horizontal-space ()</code><a name="index-delete_002dhorizontal_002dspace-_0028_0029-337"></a><dd>Delete all spaces and tabs around point. By default, this is unbound.
|
|
|
|
<br><dt><code>kill-region ()</code><a name="index-kill_002dregion-_0028_0029-338"></a><dd>Kill the text in the current region.
|
|
By default, this command is unbound.
|
|
|
|
<br><dt><code>copy-region-as-kill ()</code><a name="index-copy_002dregion_002das_002dkill-_0028_0029-339"></a><dd>Copy the text in the region to the kill buffer, so it can be yanked
|
|
right away. By default, this command is unbound.
|
|
|
|
<br><dt><code>copy-backward-word ()</code><a name="index-copy_002dbackward_002dword-_0028_0029-340"></a><dd>Copy the word before point to the kill buffer.
|
|
The word boundaries are the same as <code>backward-word</code>.
|
|
By default, this command is unbound.
|
|
|
|
<br><dt><code>copy-forward-word ()</code><a name="index-copy_002dforward_002dword-_0028_0029-341"></a><dd>Copy the word following point to the kill buffer.
|
|
The word boundaries are the same as <code>forward-word</code>.
|
|
By default, this command is unbound.
|
|
|
|
<br><dt><code>yank (C-y)</code><a name="index-yank-_0028C_002dy_0029-342"></a><dd>Yank the top of the kill ring into the buffer at point.
|
|
|
|
<br><dt><code>yank-pop (M-y)</code><a name="index-yank_002dpop-_0028M_002dy_0029-343"></a><dd>Rotate the kill-ring, and yank the new top. You can only do this if
|
|
the prior command is <code>yank</code> or <code>yank-pop</code>.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Numeric-Arguments"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Commands-For-Completion">Commands For Completion</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Commands-For-Killing">Commands For Killing</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.5 Specifying Numeric Arguments</h4>
|
|
|
|
<dl>
|
|
<dt><code>digit-argument (</code><kbd>M-0</kbd><code>, </code><kbd>M-1</kbd><code>, ... </code><kbd>M--</kbd><code>)</code><a name="index-digit_002dargument-_0028_0040kbd_007bM_002d0_007d_002c-_0040kbd_007bM_002d1_007d_002c-_0040dots_007b_007d-_0040kbd_007bM_002d_002d_007d_0029-344"></a><dd>Add this digit to the argument already accumulating, or start a new
|
|
argument. <kbd>M--</kbd> starts a negative argument.
|
|
|
|
<br><dt><code>universal-argument ()</code><a name="index-universal_002dargument-_0028_0029-345"></a><dd>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 <code>universal-argument</code>
|
|
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.
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Commands-For-Completion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Keyboard-Macros">Keyboard Macros</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Numeric-Arguments">Numeric Arguments</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.6 Letting Readline Type For You</h4>
|
|
|
|
<dl>
|
|
<dt><code>complete (<TAB>)</code><a name="index-complete-_0028_0040key_007bTAB_007d_0029-346"></a><dd>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 `<samp><span class="samp">$</span></samp>'), username (if the text begins with
|
|
`<samp><span class="samp">~</span></samp>'), hostname (if the text begins with `<samp><span class="samp">@</span></samp>'), or
|
|
command (including aliases and functions) in turn. If none
|
|
of these produces a match, filename completion is attempted.
|
|
|
|
<br><dt><code>possible-completions (M-?)</code><a name="index-possible_002dcompletions-_0028M_002d_003f_0029-347"></a><dd>List the possible completions of the text before point.
|
|
|
|
<br><dt><code>insert-completions (M-*)</code><a name="index-insert_002dcompletions-_0028M_002d_002a_0029-348"></a><dd>Insert all completions of the text before point that would have
|
|
been generated by <code>possible-completions</code>.
|
|
|
|
<br><dt><code>menu-complete ()</code><a name="index-menu_002dcomplete-_0028_0029-349"></a><dd>Similar to <code>complete</code>, but replaces the word to be completed
|
|
with a single match from the list of possible completions.
|
|
Repeated execution of <code>menu-complete</code> 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 <code>bell-style</code>)
|
|
and the original text is restored.
|
|
An argument of <var>n</var> moves <var>n</var> 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.
|
|
|
|
<br><dt><code>delete-char-or-list ()</code><a name="index-delete_002dchar_002dor_002dlist-_0028_0029-350"></a><dd>Deletes the character under the cursor if not at the beginning or
|
|
end of the line (like <code>delete-char</code>).
|
|
If at the end of the line, behaves identically to
|
|
<code>possible-completions</code>.
|
|
This command is unbound by default.
|
|
|
|
<br><dt><code>complete-filename (M-/)</code><dd>Attempt filename completion on the text before point.
|
|
|
|
<br><dt><code>possible-filename-completions (C-x /)</code><dd>List the possible completions of the text before point,
|
|
treating it as a filename.
|
|
|
|
<br><dt><code>complete-username (M-~)</code><dd>Attempt completion on the text before point, treating
|
|
it as a username.
|
|
|
|
<br><dt><code>possible-username-completions (C-x ~)</code><dd>List the possible completions of the text before point,
|
|
treating it as a username.
|
|
|
|
<br><dt><code>complete-variable (M-$)</code><dd>Attempt completion on the text before point, treating
|
|
it as a shell variable.
|
|
|
|
<br><dt><code>possible-variable-completions (C-x $)</code><dd>List the possible completions of the text before point,
|
|
treating it as a shell variable.
|
|
|
|
<br><dt><code>complete-hostname (M-@)</code><dd>Attempt completion on the text before point, treating
|
|
it as a hostname.
|
|
|
|
<br><dt><code>possible-hostname-completions (C-x @)</code><dd>List the possible completions of the text before point,
|
|
treating it as a hostname.
|
|
|
|
<br><dt><code>complete-command (M-!)</code><dd>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.
|
|
|
|
<br><dt><code>possible-command-completions (C-x !)</code><dd>List the possible completions of the text before point,
|
|
treating it as a command name.
|
|
|
|
<br><dt><code>dynamic-complete-history (M-<TAB>)</code><dd>Attempt completion on the text before point, comparing
|
|
the text against lines from the history list for possible
|
|
completion matches.
|
|
|
|
<br><dt><code>complete-into-braces (M-{)</code><dd>Perform filename completion and insert the list of possible completions
|
|
enclosed within braces so the list is available to the shell
|
|
(see <a href="#Brace-Expansion">Brace Expansion</a>).
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Keyboard-Macros"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Miscellaneous-Commands">Miscellaneous Commands</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Commands-For-Completion">Commands For Completion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.7 Keyboard Macros</h4>
|
|
|
|
<dl>
|
|
<dt><code>start-kbd-macro (C-x ()</code><a name="index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029-351"></a><dd>Begin saving the characters typed into the current keyboard macro.
|
|
|
|
<br><dt><code>end-kbd-macro (C-x ))</code><a name="index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029-352"></a><dd>Stop saving the characters typed into the current keyboard macro
|
|
and save the definition.
|
|
|
|
<br><dt><code>call-last-kbd-macro (C-x e)</code><a name="index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029-353"></a><dd>Re-execute the last keyboard macro defined, by making the characters
|
|
in the macro appear as if typed at the keyboard.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Miscellaneous-Commands"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Keyboard-Macros">Keyboard Macros</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">8.4.8 Some Miscellaneous Commands</h4>
|
|
|
|
<dl>
|
|
<dt><code>re-read-init-file (C-x C-r)</code><a name="index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029-354"></a><dd>Read in the contents of the <var>inputrc</var> file, and incorporate
|
|
any bindings or variable assignments found there.
|
|
|
|
<br><dt><code>abort (C-g)</code><a name="index-abort-_0028C_002dg_0029-355"></a><dd>Abort the current editing command and
|
|
ring the terminal's bell (subject to the setting of
|
|
<code>bell-style</code>).
|
|
|
|
<br><dt><code>do-uppercase-version (M-a, M-b, M-</code><var>x</var><code>, ...)</code><a name="index-do_002duppercase_002dversion-_0028M_002da_002c-M_002db_002c-M_002d_0040var_007bx_007d_002c-_0040dots_007b_007d_0029-356"></a><dd>If the metafied character <var>x</var> is lowercase, run the command
|
|
that is bound to the corresponding uppercase character.
|
|
|
|
<br><dt><code>prefix-meta (<ESC>)</code><a name="index-prefix_002dmeta-_0028_0040key_007bESC_007d_0029-357"></a><dd>Metafy the next character typed. This is for keyboards
|
|
without a meta key. Typing `<samp><span class="samp"><ESC> f</span></samp>' is equivalent to typing
|
|
<kbd>M-f</kbd>.
|
|
|
|
<br><dt><code>undo (C-_ or C-x C-u)</code><a name="index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029-358"></a><dd>Incremental undo, separately remembered for each line.
|
|
|
|
<br><dt><code>revert-line (M-r)</code><a name="index-revert_002dline-_0028M_002dr_0029-359"></a><dd>Undo all changes made to this line. This is like executing the <code>undo</code>
|
|
command enough times to get back to the beginning.
|
|
|
|
<br><dt><code>tilde-expand (M-&)</code><dd>Perform tilde expansion on the current word.
|
|
|
|
<br><dt><code>set-mark (C-@)</code><a name="index-set_002dmark-_0028C_002d_0040_0040_0029-360"></a><dd>Set the mark to the point. If a
|
|
numeric argument is supplied, the mark is set to that position.
|
|
|
|
<br><dt><code>exchange-point-and-mark (C-x C-x)</code><a name="index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029-361"></a><dd>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.
|
|
|
|
<br><dt><code>character-search (C-])</code><a name="index-character_002dsearch-_0028C_002d_005d_0029-362"></a><dd>A character is read and point is moved to the next occurrence of that
|
|
character. A negative count searches for previous occurrences.
|
|
|
|
<br><dt><code>character-search-backward (M-C-])</code><a name="index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029-363"></a><dd>A character is read and point is moved to the previous occurrence
|
|
of that character. A negative count searches for subsequent
|
|
occurrences.
|
|
|
|
<br><dt><code>insert-comment (M-#)</code><a name="index-insert_002dcomment-_0028M_002d_0023_0029-364"></a><dd>Without a numeric argument, the value of the <code>comment-begin</code>
|
|
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 <code>comment-begin</code>, the value is inserted, otherwise
|
|
the characters in <code>comment-begin</code> 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 <code>comment-begin</code> 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.
|
|
|
|
<br><dt><code>dump-functions ()</code><a name="index-dump_002dfunctions-_0028_0029-365"></a><dd>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 <var>inputrc</var> file. This command is unbound by default.
|
|
|
|
<br><dt><code>dump-variables ()</code><a name="index-dump_002dvariables-_0028_0029-366"></a><dd>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 <var>inputrc</var> file. This command is unbound by default.
|
|
|
|
<br><dt><code>dump-macros ()</code><a name="index-dump_002dmacros-_0028_0029-367"></a><dd>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 <var>inputrc</var> file. This command is unbound by default.
|
|
|
|
<br><dt><code>glob-complete-word (M-g)</code><dd>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.
|
|
|
|
<br><dt><code>glob-expand-word (C-x *)</code><dd>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 `<samp><span class="samp">*</span></samp>' is appended before
|
|
pathname expansion.
|
|
|
|
<br><dt><code>glob-list-expansions (C-x g)</code><dd>The list of expansions that would have been generated by
|
|
<code>glob-expand-word</code> is displayed, and the line is redrawn.
|
|
If a numeric argument is supplied, a `<samp><span class="samp">*</span></samp>' is appended before
|
|
pathname expansion.
|
|
|
|
<br><dt><code>display-shell-version (C-x C-v)</code><dd>Display version information about the current instance of Bash.
|
|
|
|
<br><dt><code>shell-expand-line (M-C-e)</code><dd>Expand the line as the shell does.
|
|
This performs alias and history expansion as well as all of the shell
|
|
word expansions (see <a href="#Shell-Expansions">Shell Expansions</a>).
|
|
|
|
<br><dt><code>history-expand-line (M-^)</code><dd>Perform history expansion on the current line.
|
|
|
|
<br><dt><code>magic-space ()</code><dd>Perform history expansion on the current line and insert a space
|
|
(see <a href="#History-Interaction">History Interaction</a>).
|
|
|
|
<br><dt><code>alias-expand-line ()</code><dd>Perform alias expansion on the current line (see <a href="#Aliases">Aliases</a>).
|
|
|
|
<br><dt><code>history-and-alias-expand-line ()</code><dd>Perform history and alias expansion on the current line.
|
|
|
|
<br><dt><code>insert-last-argument (M-. or M-_)</code><dd>A synonym for <code>yank-last-arg</code>.
|
|
|
|
<br><dt><code>operate-and-get-next (C-o)</code><dd>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.
|
|
|
|
<br><dt><code>edit-and-execute-command (C-xC-e)</code><dd>Invoke an editor on the current command line, and execute the result as shell
|
|
commands.
|
|
Bash attempts to invoke
|
|
<code>$VISUAL</code>, <code>$EDITOR</code>, and <code>emacs</code>
|
|
as the editor, in that order.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Readline-vi-Mode"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Programmable-Completion">Programmable Completion</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Bindable-Readline-Commands">Bindable Readline Commands</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Command-Line-Editing">Command Line Editing</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">8.5 Readline vi Mode</h3>
|
|
|
|
<p>While the Readline library does not have a full set of <code>vi</code>
|
|
editing functions, it does contain enough to allow simple editing
|
|
of the line. The Readline <code>vi</code> mode behaves as specified in
|
|
the <span class="sc">posix</span> 1003.2 standard.
|
|
|
|
<p>In order to switch interactively between <code>emacs</code> and <code>vi</code>
|
|
editing modes, use the `<samp><span class="samp">set -o emacs</span></samp>' and `<samp><span class="samp">set -o vi</span></samp>'
|
|
commands (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
The Readline default is <code>emacs</code> mode.
|
|
|
|
<p>When you enter a line in <code>vi</code> mode, you are already placed in
|
|
`insertion' mode, as if you had typed an `<samp><span class="samp">i</span></samp>'. Pressing <ESC>
|
|
switches you into `command' mode, where you can edit the text of the
|
|
line with the standard <code>vi</code> movement keys, move to previous
|
|
history lines with `<samp><span class="samp">k</span></samp>' and subsequent lines with `<samp><span class="samp">j</span></samp>', and
|
|
so forth.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Programmable-Completion"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Readline-vi-Mode">Readline vi Mode</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Command-Line-Editing">Command Line Editing</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">8.6 Programmable Completion</h3>
|
|
|
|
<p><a name="index-programmable-completion-368"></a>
|
|
When word completion is attempted for an argument to a command for
|
|
which a completion specification (a <var>compspec</var>) has been defined
|
|
using the <code>complete</code> builtin (see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>),
|
|
the programmable completion facilities are invoked.
|
|
|
|
<p>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 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.
|
|
|
|
<p>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 (see <a href="#Commands-For-Completion">Commands For Completion</a>) is performed.
|
|
|
|
<p>First, the actions specified by the compspec are used.
|
|
Only matches which are prefixed by the word being completed are
|
|
returned.
|
|
When the <samp><span class="option">-f</span></samp> or <samp><span class="option">-d</span></samp> option is used for filename or
|
|
directory name completion, the shell variable <samp><span class="env">FIGNORE</span></samp> is
|
|
used to filter the matches.
|
|
See <a href="#Bash-Variables">Bash Variables</a>, for a description of <samp><span class="env">FIGNORE</span></samp>.
|
|
|
|
<p>Any completions specified by a filename expansion pattern to the
|
|
<samp><span class="option">-G</span></samp> option are generated next.
|
|
The words generated by the pattern need not match the word being completed.
|
|
The <samp><span class="env">GLOBIGNORE</span></samp> shell variable is not used to filter the matches,
|
|
but the <samp><span class="env">FIGNORE</span></samp> shell variable is used.
|
|
|
|
<p>Next, the string specified as the argument to the <samp><span class="option">-W</span></samp> option
|
|
is considered.
|
|
The string is first split using the characters in the <samp><span class="env">IFS</span></samp>
|
|
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 (see <a href="#Shell-Expansions">Shell Expansions</a>).
|
|
The results are split using the rules described above
|
|
(see <a href="#Word-Splitting">Word Splitting</a>).
|
|
The results of the expansion are prefix-matched against the word being
|
|
completed, and the matching words become the possible completions.
|
|
|
|
<p>After these matches have been generated, any shell function or command
|
|
specified with the <samp><span class="option">-F</span></samp> and <samp><span class="option">-C</span></samp> options is invoked.
|
|
When the command or function is invoked, the <samp><span class="env">COMP_LINE</span></samp>,
|
|
<samp><span class="env">COMP_POINT</span></samp>, <samp><span class="env">COMP_KEY</span></samp>, and <samp><span class="env">COMP_TYPE</span></samp> variables are
|
|
assigned values as described above (see <a href="#Bash-Variables">Bash Variables</a>).
|
|
If a shell function is being invoked, the <samp><span class="env">COMP_WORDS</span></samp> and
|
|
<samp><span class="env">COMP_CWORD</span></samp> variables are also set.
|
|
When the function or command is invoked, the first argument is the
|
|
name of the command whose arguments are being completed, the
|
|
second argument is the word being completed, and the third argument
|
|
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.
|
|
|
|
<p>Any function specified with <samp><span class="option">-F</span></samp> is invoked first.
|
|
The function may use any of the shell facilities, including the
|
|
<code>compgen</code> builtin described below
|
|
(see <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a>), to generate the matches.
|
|
It must put the possible completions in the <samp><span class="env">COMPREPLY</span></samp> array
|
|
variable.
|
|
|
|
<p>Next, any command specified with the <samp><span class="option">-C</span></samp> 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.
|
|
|
|
<p>After all of the possible completions are generated, any filter
|
|
specified with the <samp><span class="option">-X</span></samp> option is applied to the list.
|
|
The filter is a pattern as used for pathname expansion; a `<samp><span class="samp">&</span></samp>'
|
|
in the pattern is replaced with the text of the word being completed.
|
|
A literal `<samp><span class="samp">&</span></samp>' 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 `<samp><span class="samp">!</span></samp>' negates the pattern; in this case any completion
|
|
not matching the pattern will be removed.
|
|
|
|
<p>Finally, any prefix and suffix specified with the <samp><span class="option">-P</span></samp> and <samp><span class="option">-S</span></samp>
|
|
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.
|
|
|
|
<p>If the previously-applied actions do not generate any matches, and the
|
|
<samp><span class="option">-o dirnames</span></samp> option was supplied to <code>complete</code> when the
|
|
compspec was defined, directory name completion is attempted.
|
|
|
|
<p>If the <samp><span class="option">-o plusdirs</span></samp> option was supplied to <code>complete</code> when
|
|
the compspec was defined, directory name completion is attempted and any
|
|
matches are added to the results of the other actions.
|
|
|
|
<p>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 <samp><span class="option">-o bashdefault</span></samp> option was supplied to <code>complete</code> when
|
|
the compspec was defined, the default Bash completions are attempted
|
|
if the compspec generates no matches.
|
|
If the <samp><span class="option">-o default</span></samp> option was supplied to <code>complete</code> 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.
|
|
|
|
<p>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 <var>mark-directories</var> Readline variable, regardless
|
|
of the setting of the <var>mark-symlinked-directories</var> Readline variable.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Programmable-Completion-Builtins"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Programmable-Completion">Programmable Completion</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Command-Line-Editing">Command Line Editing</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">8.7 Programmable Completion Builtins</h3>
|
|
|
|
<p><a name="index-completion-builtins-369"></a>
|
|
Two builtin commands are available to manipulate the programmable completion
|
|
facilities.
|
|
|
|
<dl>
|
|
<dt><code>compgen</code><dd><a name="index-compgen-370"></a>
|
|
<pre class="example"> <code>compgen [</code><var>option</var><code>] [</code><var>word</var><code>]</code>
|
|
</pre>
|
|
<p>Generate possible completion matches for <var>word</var> according to
|
|
the <var>option</var>s, which may be any option accepted by the
|
|
<code>complete</code>
|
|
builtin with the exception of <samp><span class="option">-p</span></samp> and <samp><span class="option">-r</span></samp>, and write
|
|
the matches to the standard output.
|
|
When using the <samp><span class="option">-F</span></samp> or <samp><span class="option">-C</span></samp> options, the various shell variables
|
|
set by the programmable completion facilities, while available, will not
|
|
have useful values.
|
|
|
|
<p>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 <var>word</var> is specified, only those completions matching <var>word</var>
|
|
will be displayed.
|
|
|
|
<p>The return value is true unless an invalid option is supplied, or no
|
|
matches were generated.
|
|
|
|
<br><dt><code>complete</code><dd><a name="index-complete-371"></a>
|
|
<pre class="example"> <code>complete [-abcdefgjksuv] [-o </code><var>comp-option</var><code>] [-A </code><var>action</var><code>] [-G </code><var>globpat</var><code>] [-W </code><var>wordlist</var><code>]
|
|
[-F </code><var>function</var><code>] [-C </code><var>command</var><code>] [-X </code><var>filterpat</var><code>]
|
|
[-P </code><var>prefix</var><code>] [-S </code><var>suffix</var><code>] </code><var>name</var><code> [</code><var>name</var><code> ...]</code>
|
|
<code>complete -pr [</code><var>name</var><code> ...]</code>
|
|
</pre>
|
|
<p>Specify how arguments to each <var>name</var> should be completed.
|
|
If the <samp><span class="option">-p</span></samp> 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 <samp><span class="option">-r</span></samp> option removes a completion specification for
|
|
each <var>name</var>, or, if no <var>name</var>s are supplied, all
|
|
completion specifications.
|
|
|
|
<p>The process of applying these completion specifications when word completion
|
|
is attempted is described above (see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
|
|
<p>Other options, if specified, have the following meanings.
|
|
The arguments to the <samp><span class="option">-G</span></samp>, <samp><span class="option">-W</span></samp>, and <samp><span class="option">-X</span></samp> options
|
|
(and, if necessary, the <samp><span class="option">-P</span></samp> and <samp><span class="option">-S</span></samp> options)
|
|
should be quoted to protect them from expansion before the
|
|
<code>complete</code> builtin is invoked.
|
|
|
|
<dl>
|
|
<dt><code>-o </code><var>comp-option</var><dd>The <var>comp-option</var> controls several aspects of the compspec's behavior
|
|
beyond the simple generation of completions.
|
|
<var>comp-option</var> may be one of:
|
|
|
|
<dl>
|
|
<dt><code>bashdefault</code><dd>Perform the rest of the default Bash completions if the compspec
|
|
generates no matches.
|
|
|
|
<br><dt><code>default</code><dd>Use Readline's default filename completion if the compspec generates
|
|
no matches.
|
|
|
|
<br><dt><code>dirnames</code><dd>Perform directory name completion if the compspec generates no matches.
|
|
|
|
<br><dt><code>filenames</code><dd>Tell Readline that the compspec generates filenames, so it can perform any
|
|
filename-specific processing (like adding a slash to directory names or
|
|
suppressing trailing spaces). This option is intended to be used with
|
|
shell functions specified with <samp><span class="option">-F</span></samp>.
|
|
|
|
<br><dt><code>nospace</code><dd>Tell Readline not to append a space (the default) to words completed at
|
|
the end of the line.
|
|
|
|
<br><dt><code>plusdirs</code><dd>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.
|
|
|
|
</dl>
|
|
|
|
<br><dt><code>-A </code><var>action</var><dd>The <var>action</var> may be one of the following to generate a list of possible
|
|
completions:
|
|
|
|
<dl>
|
|
<dt><code>alias</code><dd>Alias names. May also be specified as <samp><span class="option">-a</span></samp>.
|
|
|
|
<br><dt><code>arrayvar</code><dd>Array variable names.
|
|
|
|
<br><dt><code>binding</code><dd>Readline key binding names (see <a href="#Bindable-Readline-Commands">Bindable Readline Commands</a>).
|
|
|
|
<br><dt><code>builtin</code><dd>Names of shell builtin commands. May also be specified as <samp><span class="option">-b</span></samp>.
|
|
|
|
<br><dt><code>command</code><dd>Command names. May also be specified as <samp><span class="option">-c</span></samp>.
|
|
|
|
<br><dt><code>directory</code><dd>Directory names. May also be specified as <samp><span class="option">-d</span></samp>.
|
|
|
|
<br><dt><code>disabled</code><dd>Names of disabled shell builtins.
|
|
|
|
<br><dt><code>enabled</code><dd>Names of enabled shell builtins.
|
|
|
|
<br><dt><code>export</code><dd>Names of exported shell variables. May also be specified as <samp><span class="option">-e</span></samp>.
|
|
|
|
<br><dt><code>file</code><dd>File names. May also be specified as <samp><span class="option">-f</span></samp>.
|
|
|
|
<br><dt><code>function</code><dd>Names of shell functions.
|
|
|
|
<br><dt><code>group</code><dd>Group names. May also be specified as <samp><span class="option">-g</span></samp>.
|
|
|
|
<br><dt><code>helptopic</code><dd>Help topics as accepted by the <code>help</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<br><dt><code>hostname</code><dd>Hostnames, as taken from the file specified by the
|
|
<samp><span class="env">HOSTFILE</span></samp> shell variable (see <a href="#Bash-Variables">Bash Variables</a>).
|
|
|
|
<br><dt><code>job</code><dd>Job names, if job control is active. May also be specified as <samp><span class="option">-j</span></samp>.
|
|
|
|
<br><dt><code>keyword</code><dd>Shell reserved words. May also be specified as <samp><span class="option">-k</span></samp>.
|
|
|
|
<br><dt><code>running</code><dd>Names of running jobs, if job control is active.
|
|
|
|
<br><dt><code>service</code><dd>Service names. May also be specified as <samp><span class="option">-s</span></samp>.
|
|
|
|
<br><dt><code>setopt</code><dd>Valid arguments for the <samp><span class="option">-o</span></samp> option to the <code>set</code> builtin
|
|
(see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
<br><dt><code>shopt</code><dd>Shell option names as accepted by the <code>shopt</code> builtin
|
|
(see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<br><dt><code>signal</code><dd>Signal names.
|
|
|
|
<br><dt><code>stopped</code><dd>Names of stopped jobs, if job control is active.
|
|
|
|
<br><dt><code>user</code><dd>User names. May also be specified as <samp><span class="option">-u</span></samp>.
|
|
|
|
<br><dt><code>variable</code><dd>Names of all shell variables. May also be specified as <samp><span class="option">-v</span></samp>.
|
|
</dl>
|
|
|
|
<br><dt><code>-G </code><var>globpat</var><dd>The filename expansion pattern <var>globpat</var> is expanded to generate
|
|
the possible completions.
|
|
|
|
<br><dt><code>-W </code><var>wordlist</var><dd>The <var>wordlist</var> is split using the characters in the
|
|
<samp><span class="env">IFS</span></samp> 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.
|
|
|
|
<br><dt><code>-C </code><var>command</var><dd><var>command</var> is executed in a subshell environment, and its output is
|
|
used as the possible completions.
|
|
|
|
<br><dt><code>-F </code><var>function</var><dd>The shell function <var>function</var> is executed in the current shell
|
|
environment.
|
|
When it finishes, the possible completions are retrieved from the value
|
|
of the <samp><span class="env">COMPREPLY</span></samp> array variable.
|
|
|
|
<br><dt><code>-X </code><var>filterpat</var><dd><var>filterpat</var> 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
|
|
<var>filterpat</var> is removed from the list.
|
|
A leading `<samp><span class="samp">!</span></samp>' in <var>filterpat</var> negates the pattern; in this
|
|
case, any completion not matching <var>filterpat</var> is removed.
|
|
|
|
<br><dt><code>-P </code><var>prefix</var><dd><var>prefix</var> is added at the beginning of each possible completion
|
|
after all other options have been applied.
|
|
|
|
<br><dt><code>-S </code><var>suffix</var><dd><var>suffix</var> is appended to each possible completion
|
|
after all other options have been applied.
|
|
</dl>
|
|
|
|
<p>The return value is true unless an invalid option is supplied, an option
|
|
other than <samp><span class="option">-p</span></samp> or <samp><span class="option">-r</span></samp> is supplied without a <var>name</var>
|
|
argument, an attempt is made to remove a completion specification for
|
|
a <var>name</var> for which no specification exists, or
|
|
an error occurs adding a completion specification.
|
|
|
|
</dl>
|
|
<a name="index-History_002c-how-to-use-372"></a>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Using-History-Interactively"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Command-Line-Editing">Command Line Editing</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Job-Control">Job Control</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">9 Using History Interactively</h2>
|
|
|
|
<p>This chapter describes how to use the <span class="sc">gnu</span> History Library
|
|
interactively, from a user's standpoint.
|
|
It should be considered a user's guide.
|
|
For information on using the <span class="sc">gnu</span> History Library in other programs,
|
|
see the <span class="sc">gnu</span> Readline Library Manual.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Bash-History-Facilities">Bash History Facilities</a>: How Bash lets you manipulate your command
|
|
history.
|
|
<li><a accesskey="2" href="#Bash-History-Builtins">Bash History Builtins</a>: The Bash builtin commands that manipulate
|
|
the command history.
|
|
<li><a accesskey="3" href="#History-Interaction">History Interaction</a>: What it feels like using History as a user.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-History-Facilities"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Bash-History-Builtins">Bash History Builtins</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Using-History-Interactively">Using History Interactively</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">9.1 Bash History Facilities</h3>
|
|
|
|
<p><a name="index-command-history-373"></a><a name="index-history-list-374"></a>
|
|
When the <samp><span class="option">-o history</span></samp> option to the <code>set</code> builtin
|
|
is enabled (see <a href="#The-Set-Builtin">The Set Builtin</a>),
|
|
the shell provides access to the <dfn>command history</dfn>,
|
|
the list of commands previously typed.
|
|
The value of the <samp><span class="env">HISTSIZE</span></samp> shell variable is used as the
|
|
number of commands to save in a history list.
|
|
The text of the last <samp><span class="env">$HISTSIZE</span></samp>
|
|
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
|
|
<samp><span class="env">HISTIGNORE</span></samp> and <samp><span class="env">HISTCONTROL</span></samp>.
|
|
|
|
<p>When the shell starts up, the history is initialized from the
|
|
file named by the <samp><span class="env">HISTFILE</span></samp> variable (default <samp><span class="file">~/.bash_history</span></samp>).
|
|
The file named by the value of <samp><span class="env">HISTFILE</span></samp> is truncated, if
|
|
necessary, to contain no more than the number of lines specified by
|
|
the value of the <samp><span class="env">HISTFILESIZE</span></samp> variable.
|
|
When an interactive shell exits, the last
|
|
<samp><span class="env">$HISTSIZE</span></samp> lines are copied from the history list to the file
|
|
named by <samp><span class="env">$HISTFILE</span></samp>.
|
|
If the <code>histappend</code> shell option is set (see <a href="#Bash-Builtins">Bash Builtins</a>),
|
|
the lines are appended to the history file,
|
|
otherwise the history file is overwritten.
|
|
If <samp><span class="env">HISTFILE</span></samp>
|
|
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 <samp><span class="env">$HISTFILESIZE</span></samp>
|
|
lines. If <samp><span class="env">HISTFILESIZE</span></samp> is not set, no truncation is performed.
|
|
|
|
<p>If the <samp><span class="env">HISTTIMEFORMAT</span></samp> is set, the time stamp information
|
|
associated with each history entry is written to the history file.
|
|
|
|
<p>The builtin command <code>fc</code> may be used to list or edit and re-execute
|
|
a portion of the history list.
|
|
The <code>history</code> 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 (see <a href="#Commands-For-History">Commands For History</a>).
|
|
|
|
<p>The shell allows control over which commands are saved on the history
|
|
list. The <samp><span class="env">HISTCONTROL</span></samp> and <samp><span class="env">HISTIGNORE</span></samp>
|
|
variables may be set to cause the shell to save only a subset of the
|
|
commands entered.
|
|
The <code>cmdhist</code>
|
|
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 <code>lithist</code>
|
|
shell option causes the shell to save the command with embedded newlines
|
|
instead of semicolons.
|
|
The <code>shopt</code> builtin is used to set these options.
|
|
See <a href="#Bash-Builtins">Bash Builtins</a>, for a description of <code>shopt</code>.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Bash-History-Builtins"></a>
|
|
Next: <a rel="next" accesskey="n" href="#History-Interaction">History Interaction</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Bash-History-Facilities">Bash History Facilities</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Using-History-Interactively">Using History Interactively</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">9.2 Bash History Builtins</h3>
|
|
|
|
<p><a name="index-history-builtins-375"></a>
|
|
Bash provides two builtin commands which manipulate the
|
|
history list and history file.
|
|
|
|
<dl>
|
|
<dt><code>fc</code><dd><a name="index-fc-376"></a>
|
|
<pre class="example"> <code>fc [-e </code><var>ename</var><code>] [-lnr] [</code><var>first</var><code>] [</code><var>last</var><code>]</code>
|
|
<code>fc -s [</code><var>pat</var><code>=</code><var>rep</var><code>] [</code><var>command</var><code>]</code>
|
|
</pre>
|
|
<p>Fix Command. In the first form, a range of commands from <var>first</var> to
|
|
<var>last</var> is selected from the history list. Both <var>first</var> and
|
|
<var>last</var> 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 <var>last</var> is not specified it is set to
|
|
<var>first</var>. If <var>first</var> is not specified it is set to the previous
|
|
command for editing and −16 for listing. If the <samp><span class="option">-l</span></samp> flag is
|
|
given, the commands are listed on standard output. The <samp><span class="option">-n</span></samp> flag
|
|
suppresses the command numbers when listing. The <samp><span class="option">-r</span></samp> flag
|
|
reverses the order of the listing. Otherwise, the editor given by
|
|
<var>ename</var> is invoked on a file containing those commands. If
|
|
<var>ename</var> is not given, the value of the following variable expansion
|
|
is used: <code>${FCEDIT:-${EDITOR:-vi}}</code>. This says to use the
|
|
value of the <samp><span class="env">FCEDIT</span></samp> variable if set, or the value of the
|
|
<samp><span class="env">EDITOR</span></samp> variable if that is set, or <code>vi</code> if neither is set.
|
|
When editing is complete, the edited commands are echoed and executed.
|
|
|
|
<p>In the second form, <var>command</var> is re-executed after each instance
|
|
of <var>pat</var> in the selected command is replaced by <var>rep</var>.
|
|
|
|
<p>A useful alias to use with the <code>fc</code> command is <code>r='fc -s'</code>, so
|
|
that typing `<samp><span class="samp">r cc</span></samp>' runs the last command beginning with <code>cc</code>
|
|
and typing `<samp><span class="samp">r</span></samp>' re-executes the last command (see <a href="#Aliases">Aliases</a>).
|
|
|
|
<br><dt><code>history</code><dd><a name="index-history-377"></a>
|
|
<pre class="example"> history [<var>n</var>]
|
|
history -c
|
|
history -d <var>offset</var>
|
|
history [-anrw] [<var>filename</var>]
|
|
history -ps <var>arg</var>
|
|
</pre>
|
|
<p>With no options, display the history list with line numbers.
|
|
Lines prefixed with a `<samp><span class="samp">*</span></samp>' have been modified.
|
|
An argument of <var>n</var> lists only the last <var>n</var> lines.
|
|
If the shell variable <samp><span class="env">HISTTIMEFORMAT</span></samp> is set and not null,
|
|
it is used as a format string for <var>strftime</var> 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.
|
|
|
|
<p>Options, if supplied, have the following meanings:
|
|
|
|
<dl>
|
|
<dt><code>-c</code><dd>Clear the history list. This may be combined
|
|
with the other options to replace the history list completely.
|
|
|
|
<br><dt><code>-d </code><var>offset</var><dd>Delete the history entry at position <var>offset</var>.
|
|
<var>offset</var> should be specified as it appears when the history is
|
|
displayed.
|
|
|
|
<br><dt><code>-a</code><dd>Append the new
|
|
history lines (history lines entered since the beginning of the
|
|
current Bash session) to the history file.
|
|
|
|
<br><dt><code>-n</code><dd>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.
|
|
|
|
<br><dt><code>-r</code><dd>Read the current history file and append its contents to
|
|
the history list.
|
|
|
|
<br><dt><code>-w</code><dd>Write out the current history to the history file.
|
|
|
|
<br><dt><code>-p</code><dd>Perform history substitution on the <var>arg</var>s and display the result
|
|
on the standard output, without storing the results in the history list.
|
|
|
|
<br><dt><code>-s</code><dd>The <var>arg</var>s are added to the end of
|
|
the history list as a single entry.
|
|
|
|
</dl>
|
|
|
|
<p>When any of the <samp><span class="option">-w</span></samp>, <samp><span class="option">-r</span></samp>, <samp><span class="option">-a</span></samp>, or <samp><span class="option">-n</span></samp> options is
|
|
used, if <var>filename</var>
|
|
is given, then it is used as the history file. If not, then
|
|
the value of the <samp><span class="env">HISTFILE</span></samp> variable is used.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="History-Interaction"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Bash-History-Builtins">Bash History Builtins</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Using-History-Interactively">Using History Interactively</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">9.3 History Expansion</h3>
|
|
|
|
<p><a name="index-history-expansion-378"></a>
|
|
The History library provides a history expansion feature that is similar
|
|
to the history expansion provided by <code>csh</code>. This section
|
|
describes the syntax used to manipulate the history information.
|
|
|
|
<p>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.
|
|
|
|
<p>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
|
|
<dfn>event</dfn>, and the portions of that line that are acted upon are
|
|
called <dfn>words</dfn>. Various <dfn>modifiers</dfn> 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 `<samp><span class="samp">!</span></samp>' by default.
|
|
Only `<samp><span class="samp">\</span></samp>' and `<samp><span class="samp">'</span></samp>' may be used to escape the history expansion
|
|
character.
|
|
|
|
<p>Several shell options settable with the <code>shopt</code>
|
|
builtin (see <a href="#Bash-Builtins">Bash Builtins</a>) may be used to tailor
|
|
the behavior of history expansion. If the
|
|
<code>histverify</code> 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 <code>histreedit</code>
|
|
shell option is enabled, a failed history expansion will be
|
|
reloaded into the Readline editing buffer for correction.
|
|
The <samp><span class="option">-p</span></samp> option to the <code>history</code> builtin command
|
|
may be used to see what a history expansion will do before using it.
|
|
The <samp><span class="option">-s</span></samp> option to the <code>history</code> 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.
|
|
|
|
<p>The shell allows control of the various characters used by the
|
|
history expansion mechanism with the <code>histchars</code> variable.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Event-Designators">Event Designators</a>: How to specify which history line to use.
|
|
<li><a accesskey="2" href="#Word-Designators">Word Designators</a>: Specifying which words are of interest.
|
|
<li><a accesskey="3" href="#Modifiers">Modifiers</a>: Modifying the results of substitution.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Event-Designators"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Word-Designators">Word Designators</a>,
|
|
Up: <a rel="up" accesskey="u" href="#History-Interaction">History Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">9.3.1 Event Designators</h4>
|
|
|
|
<p><a name="index-event-designators-379"></a>
|
|
An event designator is a reference to a command line entry in the
|
|
history list.
|
|
<a name="index-history-events-380"></a>
|
|
<dl>
|
|
<dt><code>!</code><dd>Start a history substitution, except when followed by a space, tab,
|
|
the end of the line, `<samp><span class="samp">=</span></samp>' or `<samp><span class="samp">(</span></samp>' (when the
|
|
<code>extglob</code> shell option is enabled using the <code>shopt</code> builtin).
|
|
|
|
<br><dt><code>!</code><var>n</var><dd>Refer to command line <var>n</var>.
|
|
|
|
<br><dt><code>!-</code><var>n</var><dd>Refer to the command <var>n</var> lines back.
|
|
|
|
<br><dt><code>!!</code><dd>Refer to the previous command. This is a synonym for `<samp><span class="samp">!-1</span></samp>'.
|
|
|
|
<br><dt><code>!</code><var>string</var><dd>Refer to the most recent command starting with <var>string</var>.
|
|
|
|
<br><dt><code>!?</code><var>string</var><code>[?]</code><dd>Refer to the most recent command containing <var>string</var>. The trailing
|
|
`<samp><span class="samp">?</span></samp>' may be omitted if the <var>string</var> is followed immediately by
|
|
a newline.
|
|
|
|
<br><dt><code>^</code><var>string1</var><code>^</code><var>string2</var><code>^</code><dd>Quick Substitution. Repeat the last command, replacing <var>string1</var>
|
|
with <var>string2</var>. Equivalent to
|
|
<code>!!:s/</code><var>string1</var><code>/</code><var>string2</var><code>/</code>.
|
|
|
|
<br><dt><code>!#</code><dd>The entire command line typed so far.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Word-Designators"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Modifiers">Modifiers</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Event-Designators">Event Designators</a>,
|
|
Up: <a rel="up" accesskey="u" href="#History-Interaction">History Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">9.3.2 Word Designators</h4>
|
|
|
|
<p>Word designators are used to select desired words from the event.
|
|
A `<samp><span class="samp">:</span></samp>' separates the event specification from the word designator. It
|
|
may be omitted if the word designator begins with a `<samp><span class="samp">^</span></samp>', `<samp><span class="samp">$</span></samp>',
|
|
`<samp><span class="samp">*</span></samp>', `<samp><span class="samp">-</span></samp>', or `<samp><span class="samp">%</span></samp>'. 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.
|
|
|
|
<p>For example,
|
|
|
|
<dl>
|
|
<dt><code>!!</code><dd>designates the preceding command. When you type this, the preceding
|
|
command is repeated in toto.
|
|
|
|
<br><dt><code>!!:$</code><dd>designates the last argument of the preceding command. This may be
|
|
shortened to <code>!$</code>.
|
|
|
|
<br><dt><code>!fi:2</code><dd>designates the second argument of the most recent command starting with
|
|
the letters <code>fi</code>.
|
|
</dl>
|
|
|
|
<p>Here are the word designators:
|
|
|
|
<dl>
|
|
<dt><code>0 (zero)</code><dd>The <code>0</code>th word. For many applications, this is the command word.
|
|
|
|
<br><dt><var>n</var><dd>The <var>n</var>th word.
|
|
|
|
<br><dt><code>^</code><dd>The first argument; that is, word 1.
|
|
|
|
<br><dt><code>$</code><dd>The last argument.
|
|
|
|
<br><dt><code>%</code><dd>The word matched by the most recent `<samp><span class="samp">?</span><var>string</var><span class="samp">?</span></samp>' search.
|
|
|
|
<br><dt><var>x</var><code>-</code><var>y</var><dd>A range of words; `<samp><span class="samp">-</span><var>y</var></samp>' abbreviates `<samp><span class="samp">0-</span><var>y</var></samp>'.
|
|
|
|
<br><dt><code>*</code><dd>All of the words, except the <code>0</code>th. This is a synonym for `<samp><span class="samp">1-$</span></samp>'.
|
|
It is not an error to use `<samp><span class="samp">*</span></samp>' if there is just one word in the event;
|
|
the empty string is returned in that case.
|
|
|
|
<br><dt><var>x</var><code>*</code><dd>Abbreviates `<samp><var>x</var><span class="samp">-$</span></samp>'
|
|
|
|
<br><dt><var>x</var><code>-</code><dd>Abbreviates `<samp><var>x</var><span class="samp">-$</span></samp>' like `<samp><var>x</var><span class="samp">*</span></samp>', but omits the last word.
|
|
|
|
</dl>
|
|
|
|
<p>If a word designator is supplied without an event specification, the
|
|
previous command is used as the event.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Modifiers"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Word-Designators">Word Designators</a>,
|
|
Up: <a rel="up" accesskey="u" href="#History-Interaction">History Interaction</a>
|
|
|
|
</div>
|
|
|
|
<h4 class="subsection">9.3.3 Modifiers</h4>
|
|
|
|
<p>After the optional word designator, you can add a sequence of one or more
|
|
of the following modifiers, each preceded by a `<samp><span class="samp">:</span></samp>'.
|
|
|
|
<dl>
|
|
<dt><code>h</code><dd>Remove a trailing pathname component, leaving only the head.
|
|
|
|
<br><dt><code>t</code><dd>Remove all leading pathname components, leaving the tail.
|
|
|
|
<br><dt><code>r</code><dd>Remove a trailing suffix of the form `<samp><span class="samp">.</span><var>suffix</var></samp>', leaving
|
|
the basename.
|
|
|
|
<br><dt><code>e</code><dd>Remove all but the trailing suffix.
|
|
|
|
<br><dt><code>p</code><dd>Print the new command but do not execute it.
|
|
|
|
<br><dt><code>q</code><dd>Quote the substituted words, escaping further substitutions.
|
|
|
|
<br><dt><code>x</code><dd>Quote the substituted words as with `<samp><span class="samp">q</span></samp>',
|
|
but break into words at spaces, tabs, and newlines.
|
|
|
|
<br><dt><code>s/</code><var>old</var><code>/</code><var>new</var><code>/</code><dd>Substitute <var>new</var> for the first occurrence of <var>old</var> in the
|
|
event line. Any delimiter may be used in place of `<samp><span class="samp">/</span></samp>'.
|
|
The delimiter may be quoted in <var>old</var> and <var>new</var>
|
|
with a single backslash. If `<samp><span class="samp">&</span></samp>' appears in <var>new</var>,
|
|
it is replaced by <var>old</var>. A single backslash will quote
|
|
the `<samp><span class="samp">&</span></samp>'. The final delimiter is optional if it is the last
|
|
character on the input line.
|
|
|
|
<br><dt><code>&</code><dd>Repeat the previous substitution.
|
|
|
|
<br><dt><code>g</code><dt><code>a</code><dd>Cause changes to be applied over the entire event line. Used in
|
|
conjunction with `<samp><span class="samp">s</span></samp>', as in <code>gs/</code><var>old</var><code>/</code><var>new</var><code>/</code>,
|
|
or with `<samp><span class="samp">&</span></samp>'.
|
|
|
|
<br><dt><code>G</code><dd>Apply the following `<samp><span class="samp">s</span></samp>' modifier once to each word in the event.
|
|
|
|
</dl>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Installing-Bash"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Reporting-Bugs">Reporting Bugs</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Command-Line-Editing">Command Line Editing</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="chapter">10 Installing Bash</h2>
|
|
|
|
<p>This chapter provides basic instructions for installing Bash on
|
|
the various supported platforms. The distribution supports the
|
|
<span class="sc">gnu</span> operating systems, nearly every version of Unix, and several
|
|
non-Unix systems such as BeOS and Interix.
|
|
Other independent ports exist for
|
|
<span class="sc">ms-dos</span>, <span class="sc">os/2</span>, and Windows platforms.
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#Basic-Installation">Basic Installation</a>: Installation instructions.
|
|
<li><a accesskey="2" href="#Compilers-and-Options">Compilers and Options</a>: How to set special options for various
|
|
systems.
|
|
<li><a accesskey="3" href="#Compiling-For-Multiple-Architectures">Compiling For Multiple Architectures</a>: How to compile Bash for more
|
|
than one kind of system from
|
|
the same source tree.
|
|
<li><a accesskey="4" href="#Installation-Names">Installation Names</a>: How to set the various paths used by the installation.
|
|
<li><a accesskey="5" href="#Specifying-the-System-Type">Specifying the System Type</a>: How to configure Bash for a particular system.
|
|
<li><a accesskey="6" href="#Sharing-Defaults">Sharing Defaults</a>: How to share default configuration values among GNU
|
|
programs.
|
|
<li><a accesskey="7" href="#Operation-Controls">Operation Controls</a>: Options recognized by the configuration program.
|
|
<li><a accesskey="8" href="#Optional-Features">Optional Features</a>: How to enable and disable optional features when
|
|
building Bash.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Basic-Installation"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Compilers-and-Options">Compilers and Options</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.1 Basic Installation</h3>
|
|
|
|
<p><a name="index-installation-381"></a><a name="index-configuration-382"></a><a name="index-Bash-installation-383"></a><a name="index-Bash-configuration-384"></a>
|
|
These are installation instructions for Bash.
|
|
|
|
<p>The simplest way to compile Bash is:
|
|
|
|
<ol type=1 start=1>
|
|
<li><code>cd</code> to the directory containing the source code and type
|
|
`<samp><span class="samp">./configure</span></samp>' to configure Bash for your system. If you're
|
|
using <code>csh</code> on an old version of System V, you might need to
|
|
type `<samp><span class="samp">sh ./configure</span></samp>' instead to prevent <code>csh</code> from trying
|
|
to execute <code>configure</code> itself.
|
|
|
|
<p>Running <code>configure</code> takes some time.
|
|
While running, it prints messages telling which features it is
|
|
checking for.
|
|
|
|
<li>Type `<samp><span class="samp">make</span></samp>' to compile Bash and build the <code>bashbug</code> bug
|
|
reporting script.
|
|
|
|
<li>Optionally, type `<samp><span class="samp">make tests</span></samp>' to run the Bash test suite.
|
|
|
|
<li>Type `<samp><span class="samp">make install</span></samp>' to install <code>bash</code> and <code>bashbug</code>.
|
|
This will also install the manual pages and Info file.
|
|
|
|
</ol>
|
|
|
|
<p>The <code>configure</code> shell script attempts to guess correct
|
|
values for various system-dependent variables used during
|
|
compilation. It uses those values to create a <samp><span class="file">Makefile</span></samp> in
|
|
each directory of the package (the top directory, the
|
|
<samp><span class="file">builtins</span></samp>, <samp><span class="file">doc</span></samp>, and <samp><span class="file">support</span></samp> directories,
|
|
each directory under <samp><span class="file">lib</span></samp>, and several others). It also creates a
|
|
<samp><span class="file">config.h</span></samp> file containing system-dependent definitions.
|
|
Finally, it creates a shell script named <code>config.status</code> that you
|
|
can run in the future to recreate the current configuration, a
|
|
file <samp><span class="file">config.cache</span></samp> that saves the results of its tests to
|
|
speed up reconfiguring, and a file <samp><span class="file">config.log</span></samp> containing
|
|
compiler output (useful mainly for debugging <code>configure</code>).
|
|
If at some point
|
|
<samp><span class="file">config.cache</span></samp> contains results you don't want to keep, you
|
|
may remove or edit it.
|
|
|
|
<p>To find out more about the options and arguments that the
|
|
<code>configure</code> script understands, type
|
|
|
|
<pre class="example"> bash-2.04$ ./configure --help
|
|
</pre>
|
|
<p class="noindent">at the Bash prompt in your Bash source directory.
|
|
|
|
<p>If you need to do unusual things to compile Bash, please
|
|
try to figure out how <code>configure</code> could check whether or not
|
|
to do them, and mail diffs or instructions to
|
|
<a href="mailto:bash-maintainers@gnu.org">bash-maintainers@gnu.org</a> so they can be
|
|
considered for the next release.
|
|
|
|
<p>The file <samp><span class="file">configure.in</span></samp> is used to create <code>configure</code>
|
|
by a program called Autoconf. You only need
|
|
<samp><span class="file">configure.in</span></samp> if you want to change it or regenerate
|
|
<code>configure</code> using a newer version of Autoconf. If
|
|
you do this, make sure you are using Autoconf version 2.50 or
|
|
newer.
|
|
|
|
<p>You can remove the program binaries and object files from the
|
|
source code directory by typing `<samp><span class="samp">make clean</span></samp>'. To also remove the
|
|
files that <code>configure</code> created (so you can compile Bash for
|
|
a different kind of computer), type `<samp><span class="samp">make distclean</span></samp>'.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Compilers-and-Options"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Compiling-For-Multiple-Architectures">Compiling For Multiple Architectures</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Basic-Installation">Basic Installation</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.2 Compilers and Options</h3>
|
|
|
|
<p>Some systems require unusual options for compilation or linking
|
|
that the <code>configure</code> script does not know about. You can
|
|
give <code>configure</code> 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:
|
|
|
|
<pre class="example"> CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
|
</pre>
|
|
<p>On systems that have the <code>env</code> program, you can do it like this:
|
|
|
|
<pre class="example"> env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
|
</pre>
|
|
<p>The configuration process uses GCC to build Bash if it
|
|
is available.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Compiling-For-Multiple-Architectures"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Installation-Names">Installation Names</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Compilers-and-Options">Compilers and Options</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.3 Compiling For Multiple Architectures</h3>
|
|
|
|
<p>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 <code>make</code> that
|
|
supports the <code>VPATH</code> variable, such as GNU <code>make</code>.
|
|
<code>cd</code> to the
|
|
directory where you want the object files and executables to go and run
|
|
the <code>configure</code> script from the source directory. You may need to
|
|
supply the <samp><span class="option">--srcdir=PATH</span></samp> argument to tell <code>configure</code> where the
|
|
source files are. <code>configure</code> automatically checks for the
|
|
source code in the directory that <code>configure</code> is in and in `..'.
|
|
|
|
<p>If you have to use a <code>make</code> that does not supports the <code>VPATH</code>
|
|
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 `<samp><span class="samp">make distclean</span></samp>' before
|
|
reconfiguring for another architecture.
|
|
|
|
<p>Alternatively, if your system supports symbolic links, you can use the
|
|
<samp><span class="file">support/mkclone</span></samp> 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 <samp><span class="file">/usr/gnu/src/bash-2.0</span></samp>:
|
|
|
|
<pre class="example"> bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
|
|
</pre>
|
|
<p class="noindent">The <code>mkclone</code> script requires Bash, so you must have already built
|
|
Bash for at least one architecture before you can create build
|
|
directories for other architectures.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Installation-Names"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Specifying-the-System-Type">Specifying the System Type</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Compiling-For-Multiple-Architectures">Compiling For Multiple Architectures</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.4 Installation Names</h3>
|
|
|
|
<p>By default, `<samp><span class="samp">make install</span></samp>' will install into
|
|
<samp><span class="file">/usr/local/bin</span></samp>, <samp><span class="file">/usr/local/man</span></samp>, etc. You can
|
|
specify an installation prefix other than <samp><span class="file">/usr/local</span></samp> by
|
|
giving <code>configure</code> the option <samp><span class="option">--prefix=</span><var>PATH</var></samp>,
|
|
or by specifying a value for the <code>DESTDIR</code> `<samp><span class="samp">make</span></samp>'
|
|
variable when running `<samp><span class="samp">make install</span></samp>'.
|
|
|
|
<p>You can specify separate installation prefixes for
|
|
architecture-specific files and architecture-independent files.
|
|
If you give <code>configure</code> the option
|
|
<samp><span class="option">--exec-prefix=</span><var>PATH</var></samp>, `<samp><span class="samp">make install</span></samp>' will use
|
|
<var>PATH</var> as the prefix for installing programs and libraries.
|
|
Documentation and other data files will still use the regular prefix.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Specifying-the-System-Type"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Sharing-Defaults">Sharing Defaults</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Installation-Names">Installation Names</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.5 Specifying the System Type</h3>
|
|
|
|
<p>There may be some features <code>configure</code> can not figure out
|
|
automatically, but need to determine by the type of host Bash
|
|
will run on. Usually <code>configure</code> can figure that
|
|
out, but if it prints a message saying it can not guess the host
|
|
type, give it the <samp><span class="option">--host=TYPE</span></samp> option. `<samp><span class="samp">TYPE</span></samp>' can
|
|
either be a short name for the system type, such as `<samp><span class="samp">sun4</span></samp>',
|
|
or a canonical name with three fields: `<samp><span class="samp">CPU-COMPANY-SYSTEM</span></samp>'
|
|
(e.g., `<samp><span class="samp">i386-unknown-freebsd4.2</span></samp>').
|
|
|
|
<p>See the file <samp><span class="file">support/config.sub</span></samp> for the possible
|
|
values of each field.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Sharing-Defaults"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Operation-Controls">Operation Controls</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Specifying-the-System-Type">Specifying the System Type</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.6 Sharing Defaults</h3>
|
|
|
|
<p>If you want to set default values for <code>configure</code> scripts to
|
|
share, you can create a site shell script called
|
|
<code>config.site</code> that gives default values for variables like
|
|
<code>CC</code>, <code>cache_file</code>, and <code>prefix</code>. <code>configure</code>
|
|
looks for <samp><span class="file">PREFIX/share/config.site</span></samp> if it exists, then
|
|
<samp><span class="file">PREFIX/etc/config.site</span></samp> if it exists. Or, you can set the
|
|
<code>CONFIG_SITE</code> environment variable to the location of the site
|
|
script. A warning: the Bash <code>configure</code> looks for a site script,
|
|
but not all <code>configure</code> scripts do.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Operation-Controls"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Optional-Features">Optional Features</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Sharing-Defaults">Sharing Defaults</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.7 Operation Controls</h3>
|
|
|
|
<p><code>configure</code> recognizes the following options to control how it
|
|
operates.
|
|
|
|
<dl>
|
|
<dt><code>--cache-file=</code><var>file</var><dd>Use and save the results of the tests in
|
|
<var>file</var> instead of <samp><span class="file">./config.cache</span></samp>. Set <var>file</var> to
|
|
<samp><span class="file">/dev/null</span></samp> to disable caching, for debugging
|
|
<code>configure</code>.
|
|
|
|
<br><dt><code>--help</code><dd>Print a summary of the options to <code>configure</code>, and exit.
|
|
|
|
<br><dt><code>--quiet</code><dt><code>--silent</code><dt><code>-q</code><dd>Do not print messages saying which checks are being made.
|
|
|
|
<br><dt><code>--srcdir=</code><var>dir</var><dd>Look for the Bash source code in directory <var>dir</var>. Usually
|
|
<code>configure</code> can determine that directory automatically.
|
|
|
|
<br><dt><code>--version</code><dd>Print the version of Autoconf used to generate the <code>configure</code>
|
|
script, and exit.
|
|
</dl>
|
|
|
|
<p><code>configure</code> also accepts some other, not widely used, boilerplate
|
|
options. `<samp><span class="samp">configure --help</span></samp>' prints the complete list.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Optional-Features"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Operation-Controls">Operation Controls</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Installing-Bash">Installing Bash</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="section">10.8 Optional Features</h3>
|
|
|
|
<p>The Bash <code>configure</code> has a number of <samp><span class="option">--enable-</span><var>feature</var></samp>
|
|
options, where <var>feature</var> indicates an optional part of Bash.
|
|
There are also several <samp><span class="option">--with-</span><var>package</var></samp> options,
|
|
where <var>package</var> is something like `<samp><span class="samp">bash-malloc</span></samp>' or `<samp><span class="samp">purify</span></samp>'.
|
|
To turn off the default use of a package, use
|
|
<samp><span class="option">--without-</span><var>package</var></samp>. To configure Bash without a feature
|
|
that is enabled by default, use <samp><span class="option">--disable-</span><var>feature</var></samp>.
|
|
|
|
<p>Here is a complete list of the <samp><span class="option">--enable-</span></samp> and
|
|
<samp><span class="option">--with-</span></samp> options that the Bash <code>configure</code> recognizes.
|
|
|
|
<dl>
|
|
<dt><code>--with-afs</code><dd>Define if you are using the Andrew File System from Transarc.
|
|
|
|
<br><dt><code>--with-bash-malloc</code><dd>Use the Bash version of
|
|
<code>malloc</code> in the directory <samp><span class="file">lib/malloc</span></samp>. This is not the same
|
|
<code>malloc</code> that appears in <span class="sc">gnu</span> libc, but an older version
|
|
originally derived from the 4.2 <span class="sc">bsd</span> <code>malloc</code>. This <code>malloc</code>
|
|
is very fast, but wastes some space on each allocation.
|
|
This option is enabled by default.
|
|
The <samp><span class="file">NOTES</span></samp> file contains a list of systems for
|
|
which this should be turned off, and <code>configure</code> disables this
|
|
option automatically for a number of systems.
|
|
|
|
<br><dt><code>--with-curses</code><dd>Use the curses library instead of the termcap library. This should
|
|
be supplied if your system has an inadequate or incomplete termcap
|
|
database.
|
|
|
|
<br><dt><code>--with-gnu-malloc</code><dd>A synonym for <code>--with-bash-malloc</code>.
|
|
|
|
<br><dt><code>--with-installed-readline[=</code><var>PREFIX</var><code>]</code><dd>Define this to make Bash link with a locally-installed version of Readline
|
|
rather than the version in <samp><span class="file">lib/readline</span></samp>. This works only with
|
|
Readline 5.0 and later versions. If <var>PREFIX</var> is <code>yes</code> or not
|
|
supplied, <code>configure</code> uses the values of the make variables
|
|
<code>includedir</code> and <code>libdir</code>, which are subdirectories of <code>prefix</code>
|
|
by default, to find the installed version of Readline if it is not in
|
|
the standard system include and library directories.
|
|
If <var>PREFIX</var> is <code>no</code>, Bash links with the version in
|
|
<samp><span class="file">lib/readline</span></samp>.
|
|
If <var>PREFIX</var> is set to any other value, <code>configure</code> treats it as
|
|
a directory pathname and looks for
|
|
the installed version of Readline in subdirectories of that directory
|
|
(include files in <var>PREFIX</var>/<code>include</code> and the library in
|
|
<var>PREFIX</var>/<code>lib</code>).
|
|
|
|
<br><dt><code>--with-purify</code><dd>Define this to use the Purify memory allocation checker from Rational
|
|
Software.
|
|
|
|
<br><dt><code>--enable-minimal-config</code><dd>This produces a shell with minimal features, close to the historical
|
|
Bourne shell.
|
|
</dl>
|
|
|
|
<p>There are several <samp><span class="option">--enable-</span></samp> options that alter how Bash is
|
|
compiled and linked, rather than changing run-time features.
|
|
|
|
<dl>
|
|
<dt><code>--enable-largefile</code><dd>Enable support for <a href="http://www.sas.com/standards/large_file/x_open.20Mar96.html">large files</a> 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.
|
|
|
|
<br><dt><code>--enable-profiling</code><dd>This builds a Bash binary that produces profiling information to be
|
|
processed by <code>gprof</code> each time it is executed.
|
|
|
|
<br><dt><code>--enable-static-link</code><dd>This causes Bash to be linked statically, if <code>gcc</code> is being used.
|
|
This could be used to build a version to use as root's shell.
|
|
</dl>
|
|
|
|
<p>The `<samp><span class="samp">minimal-config</span></samp>' option can be used to disable all of
|
|
the following options, but it is processed first, so individual
|
|
options may be enabled using `<samp><span class="samp">enable-</span><var>feature</var></samp>'.
|
|
|
|
<p>All of the following options except for `<samp><span class="samp">disabled-builtins</span></samp>' and
|
|
`<samp><span class="samp">xpg-echo-default</span></samp>' are
|
|
enabled by default, unless the operating system does not provide the
|
|
necessary support.
|
|
|
|
<dl>
|
|
<dt><code>--enable-alias</code><dd>Allow alias expansion and include the <code>alias</code> and <code>unalias</code>
|
|
builtins (see <a href="#Aliases">Aliases</a>).
|
|
|
|
<br><dt><code>--enable-arith-for-command</code><dd>Include support for the alternate form of the <code>for</code> command
|
|
that behaves like the C language <code>for</code> statement
|
|
(see <a href="#Looping-Constructs">Looping Constructs</a>).
|
|
|
|
<br><dt><code>--enable-array-variables</code><dd>Include support for one-dimensional array shell variables
|
|
(see <a href="#Arrays">Arrays</a>).
|
|
|
|
<br><dt><code>--enable-bang-history</code><dd>Include support for <code>csh</code>-like history substitution
|
|
(see <a href="#History-Interaction">History Interaction</a>).
|
|
|
|
<br><dt><code>--enable-brace-expansion</code><dd>Include <code>csh</code>-like brace expansion
|
|
( <code>b{a,b}c</code> ==> <code>bac bbc</code> ).
|
|
See <a href="#Brace-Expansion">Brace Expansion</a>, for a complete description.
|
|
|
|
<br><dt><code>--enable-command-timing</code><dd>Include support for recognizing <code>time</code> as a reserved word and for
|
|
displaying timing statistics for the pipeline following <code>time</code>
|
|
(see <a href="#Pipelines">Pipelines</a>).
|
|
This allows pipelines as well as shell builtins and functions to be timed.
|
|
|
|
<br><dt><code>--enable-cond-command</code><dd>Include support for the <code>[[</code> conditional command.
|
|
(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
<br><dt><code>--enable-cond-regexp</code><dd>Include support for matching POSIX regular expressions using the
|
|
`<samp><span class="samp">=~</span></samp>' binary operator in the <code>[[</code> conditional command.
|
|
(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
<br><dt><code>--enable-debugger</code><dd>Include support for the bash debugger (distributed separately).
|
|
|
|
<br><dt><code>--enable-directory-stack</code><dd>Include support for a <code>csh</code>-like directory stack and the
|
|
<code>pushd</code>, <code>popd</code>, and <code>dirs</code> builtins
|
|
(see <a href="#The-Directory-Stack">The Directory Stack</a>).
|
|
|
|
<br><dt><code>--enable-disabled-builtins</code><dd>Allow builtin commands to be invoked via `<samp><span class="samp">builtin xxx</span></samp>'
|
|
even after <code>xxx</code> has been disabled using `<samp><span class="samp">enable -n xxx</span></samp>'.
|
|
See <a href="#Bash-Builtins">Bash Builtins</a>, for details of the <code>builtin</code> and
|
|
<code>enable</code> builtin commands.
|
|
|
|
<br><dt><code>--enable-dparen-arithmetic</code><dd>Include support for the <code>((...))</code> command
|
|
(see <a href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
<br><dt><code>--enable-extended-glob</code><dd>Include support for the extended pattern matching features described
|
|
above under <a href="#Pattern-Matching">Pattern Matching</a>.
|
|
|
|
<br><dt><code>--enable-help-builtin</code><dd>Include the <code>help</code> builtin, which displays help on shell builtins and
|
|
variables (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<br><dt><code>--enable-history</code><dd>Include command history and the <code>fc</code> and <code>history</code>
|
|
builtin commands (see <a href="#Bash-History-Facilities">Bash History Facilities</a>).
|
|
|
|
<br><dt><code>--enable-job-control</code><dd>This enables the job control features (see <a href="#Job-Control">Job Control</a>),
|
|
if the operating system supports them.
|
|
|
|
<br><dt><code>--enable-multibyte</code><dd>This enables support for multibyte characters if the operating
|
|
system provides the necessary support.
|
|
|
|
<br><dt><code>--enable-net-redirections</code><dd>This enables the special handling of filenames of the form
|
|
<code>/dev/tcp/</code><var>host</var><code>/</code><var>port</var> and
|
|
<code>/dev/udp/</code><var>host</var><code>/</code><var>port</var>
|
|
when used in redirections (see <a href="#Redirections">Redirections</a>).
|
|
|
|
<br><dt><code>--enable-process-substitution</code><dd>This enables process substitution (see <a href="#Process-Substitution">Process Substitution</a>) if
|
|
the operating system provides the necessary support.
|
|
|
|
<br><dt><code>--enable-progcomp</code><dd>Enable the programmable completion facilities
|
|
(see <a href="#Programmable-Completion">Programmable Completion</a>).
|
|
If Readline is not enabled, this option has no effect.
|
|
|
|
<br><dt><code>--enable-prompt-string-decoding</code><dd>Turn on the interpretation of a number of backslash-escaped characters
|
|
in the <samp><span class="env">$PS1</span></samp>, <samp><span class="env">$PS2</span></samp>, <samp><span class="env">$PS3</span></samp>, and <samp><span class="env">$PS4</span></samp> prompt
|
|
strings. See <a href="#Printing-a-Prompt">Printing a Prompt</a>, for a complete list of prompt
|
|
string escape sequences.
|
|
|
|
<br><dt><code>--enable-readline</code><dd>Include support for command-line editing and history with the Bash
|
|
version of the Readline library (see <a href="#Command-Line-Editing">Command Line Editing</a>).
|
|
|
|
<br><dt><code>--enable-restricted</code><dd>Include support for a <dfn>restricted shell</dfn>. If this is enabled, Bash,
|
|
when called as <code>rbash</code>, enters a restricted mode. See
|
|
<a href="#The-Restricted-Shell">The Restricted Shell</a>, for a description of restricted mode.
|
|
|
|
<br><dt><code>--enable-select</code><dd>Include the <code>select</code> builtin, which allows the generation of simple
|
|
menus (see <a href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
<br><dt><code>--enable-separate-helpfiles</code><dd>Use external files for the documentation displayed by the <code>help</code> builtin
|
|
instead of storing the text internally.
|
|
|
|
<br><dt><code>--enable-single-help-strings</code><dd>Store the text displayed by the <code>help</code> 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.
|
|
|
|
<br><dt><code>--enable-strict-posix-default</code><dd>Make Bash <span class="sc">posix</span>-conformant by default (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
|
|
|
|
<br><dt><code>--enable-usg-echo-default</code><dd>A synonym for <code>--enable-xpg-echo-default</code>.
|
|
|
|
<br><dt><code>--enable-xpg-echo-default</code><dd>Make the <code>echo</code> builtin expand backslash-escaped characters by default,
|
|
without requiring the <samp><span class="option">-e</span></samp> option.
|
|
This sets the default value of the <code>xpg_echo</code> shell option to <code>on</code>,
|
|
which makes the Bash <code>echo</code> behave more like the version specified in
|
|
the Single Unix Specification, version 3.
|
|
See <a href="#Bash-Builtins">Bash Builtins</a>, for a description of the escape sequences that
|
|
<code>echo</code> recognizes.
|
|
|
|
</dl>
|
|
|
|
<p>The file <samp><span class="file">config-top.h</span></samp> contains C Preprocessor
|
|
`<samp><span class="samp">#define</span></samp>' statements for options which are not settable from
|
|
<code>configure</code>.
|
|
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.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Reporting-Bugs"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Major-Differences-From-The-Bourne-Shell">Major Differences From The Bourne Shell</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Installing-Bash">Installing Bash</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="appendix">Appendix A Reporting Bugs</h2>
|
|
|
|
<p>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
|
|
<a href="ftp://ftp.gnu.org/pub/bash/">ftp://ftp.gnu.org/pub/bash/</a>.
|
|
|
|
<p>Once you have determined that a bug actually exists, use the
|
|
<code>bashbug</code> 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 <a href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a> or posted to the Usenet
|
|
newsgroup <code>gnu.bash.bug</code>.
|
|
|
|
<p>All bug reports should include:
|
|
<ul>
|
|
<li>The version number of Bash.
|
|
<li>The hardware and operating system.
|
|
<li>The compiler used to compile Bash.
|
|
<li>A description of the bug behaviour.
|
|
<li>A short script or `recipe' which exercises the bug and may be used
|
|
to reproduce it.
|
|
</ul>
|
|
|
|
<p class="noindent"><code>bashbug</code> inserts the first three items automatically into
|
|
the template it provides for filing a bug report.
|
|
|
|
<p>Please send all reports concerning this manual to
|
|
<a href="mailto:chet@po.CWRU.Edu">chet@po.CWRU.Edu</a>.
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Major-Differences-From-The-Bourne-Shell"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Copying-This-Manual">Copying This Manual</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Reporting-Bugs">Reporting Bugs</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="appendix">Appendix B Major Differences From The Bourne Shell</h2>
|
|
|
|
<p>Bash implements essentially the same grammar, parameter and
|
|
variable expansion, redirection, and quoting as the Bourne Shell.
|
|
Bash uses the <span class="sc">posix</span> 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 <code>sh</code> included in SVR4.2 (the
|
|
last version of the historical Bourne shell) as the baseline reference.
|
|
|
|
<ul>
|
|
<li>Bash is <span class="sc">posix</span>-conformant, even where the <span class="sc">posix</span> specification
|
|
differs from traditional <code>sh</code> behavior (see <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>).
|
|
|
|
<li>Bash has multi-character invocation options (see <a href="#Invoking-Bash">Invoking Bash</a>).
|
|
|
|
<li>Bash has command-line editing (see <a href="#Command-Line-Editing">Command Line Editing</a>) and
|
|
the <code>bind</code> builtin.
|
|
|
|
<li>Bash provides a programmable word completion mechanism
|
|
(see <a href="#Programmable-Completion">Programmable Completion</a>), and two builtin commands,
|
|
<code>complete</code> and <code>compgen</code>, to manipulate it.
|
|
|
|
<li>Bash has command history (see <a href="#Bash-History-Facilities">Bash History Facilities</a>) and the
|
|
<code>history</code> and <code>fc</code> builtins to manipulate it.
|
|
The Bash history list maintains timestamp information and uses the
|
|
value of the <code>HISTTIMEFORMAT</code> variable to display it.
|
|
|
|
<li>Bash implements <code>csh</code>-like history expansion
|
|
(see <a href="#History-Interaction">History Interaction</a>).
|
|
|
|
<li>Bash has one-dimensional array variables (see <a href="#Arrays">Arrays</a>), 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.
|
|
|
|
<li>The <code>$'...'</code> quoting syntax, which expands ANSI-C
|
|
backslash-escaped characters in the text between the single quotes,
|
|
is supported (see <a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>).
|
|
|
|
<li>Bash supports the <code>$"..."</code> quoting syntax to do
|
|
locale-specific translation of the characters between the double
|
|
quotes. The <samp><span class="option">-D</span></samp>, <samp><span class="option">--dump-strings</span></samp>, and <samp><span class="option">--dump-po-strings</span></samp>
|
|
invocation options list the translatable strings found in a script
|
|
(see <a href="#Locale-Translation">Locale Translation</a>).
|
|
|
|
<li>Bash implements the <code>!</code> keyword to negate the return value of
|
|
a pipeline (see <a href="#Pipelines">Pipelines</a>).
|
|
Very useful when an <code>if</code> statement needs to act only if a test fails.
|
|
The Bash `<samp><span class="samp">-o pipefail</span></samp>' option to <code>set</code> will cause a pipeline to
|
|
return a failure status if any command fails.
|
|
|
|
<li>Bash has the <code>time</code> reserved word and command timing (see <a href="#Pipelines">Pipelines</a>).
|
|
The display of the timing statistics may be controlled with the
|
|
<samp><span class="env">TIMEFORMAT</span></samp> variable.
|
|
|
|
<li>Bash implements the <code>for (( </code><var>expr1</var><code> ; </code><var>expr2</var><code> ; </code><var>expr3</var><code> ))</code>
|
|
arithmetic for command, similar to the C language (see <a href="#Looping-Constructs">Looping Constructs</a>).
|
|
|
|
<li>Bash includes the <code>select</code> compound command, which allows the
|
|
generation of simple menus (see <a href="#Conditional-Constructs">Conditional Constructs</a>).
|
|
|
|
<li>Bash includes the <code>[[</code> compound command, which makes conditional
|
|
testing part of the shell grammar (see <a href="#Conditional-Constructs">Conditional Constructs</a>), including
|
|
optional regular expression matching.
|
|
|
|
<li>Bash provides optional case-insensitive matching for the <code>case</code> and
|
|
<code>[[</code> constructs.
|
|
|
|
<li>Bash includes brace expansion (see <a href="#Brace-Expansion">Brace Expansion</a>) and tilde
|
|
expansion (see <a href="#Tilde-Expansion">Tilde Expansion</a>).
|
|
|
|
<li>Bash implements command aliases and the <code>alias</code> and <code>unalias</code>
|
|
builtins (see <a href="#Aliases">Aliases</a>).
|
|
|
|
<li>Bash provides shell arithmetic, the <code>((</code> compound command
|
|
(see <a href="#Conditional-Constructs">Conditional Constructs</a>),
|
|
and arithmetic expansion (see <a href="#Shell-Arithmetic">Shell Arithmetic</a>).
|
|
|
|
<li>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 <code>export</code>
|
|
command.
|
|
|
|
<li>Bash supports the `<samp><span class="samp">+=</span></samp>' assignment operator, which appends to the value
|
|
of the variable named on the left hand side.
|
|
|
|
<li>Bash includes the <span class="sc">posix</span> pattern removal `<samp><span class="samp">%</span></samp>', `<samp><span class="samp">#</span></samp>', `<samp><span class="samp">%%</span></samp>'
|
|
and `<samp><span class="samp">##</span></samp>' expansions to remove leading or trailing substrings from
|
|
variable values (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<li>The expansion <code>${#xx}</code>, which returns the length of <code>${xx}</code>,
|
|
is supported (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<li>The expansion <code>${var:</code><var>offset</var><code>[:</code><var>length</var><code>]}</code>,
|
|
which expands to the substring of <code>var</code>'s value of length
|
|
<var>length</var>, beginning at <var>offset</var>, is present
|
|
(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<li>The expansion
|
|
<code>${var/[/]</code><var>pattern</var><code>[/</code><var>replacement</var><code>]}</code>,
|
|
which matches <var>pattern</var> and replaces it with <var>replacement</var> in
|
|
the value of <code>var</code>, is available (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<li>The expansion <code>${!</code><var>prefix}*</var> expansion, which expands to
|
|
the names of all shell variables whose names begin with <var>prefix</var>,
|
|
is available (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<li>Bash has <var>indirect</var> variable expansion using <code>${!word}</code>
|
|
(see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
|
|
|
|
<li>Bash can expand positional parameters beyond <code>$9</code> using
|
|
<code>${</code><var>num</var><code>}</code>.
|
|
|
|
<li>The <span class="sc">posix</span> <code>$()</code> form of command substitution
|
|
is implemented (see <a href="#Command-Substitution">Command Substitution</a>),
|
|
and preferred to the Bourne shell's <code>``</code> (which
|
|
is also implemented for backwards compatibility).
|
|
|
|
<li>Bash has process substitution (see <a href="#Process-Substitution">Process Substitution</a>).
|
|
|
|
<li>Bash automatically assigns variables that provide information about the
|
|
current user (<samp><span class="env">UID</span></samp>, <samp><span class="env">EUID</span></samp>, and <samp><span class="env">GROUPS</span></samp>), the current host
|
|
(<samp><span class="env">HOSTTYPE</span></samp>, <samp><span class="env">OSTYPE</span></samp>, <samp><span class="env">MACHTYPE</span></samp>, and <samp><span class="env">HOSTNAME</span></samp>),
|
|
and the instance of Bash that is running (<samp><span class="env">BASH</span></samp>,
|
|
<samp><span class="env">BASH_VERSION</span></samp>, and <samp><span class="env">BASH_VERSINFO</span></samp>). See <a href="#Bash-Variables">Bash Variables</a>,
|
|
for details.
|
|
|
|
<li>The <samp><span class="env">IFS</span></samp> variable is used to split only the results of expansion,
|
|
not all words (see <a href="#Word-Splitting">Word Splitting</a>).
|
|
This closes a longstanding shell security hole.
|
|
|
|
<li>Bash implements the full set of <span class="sc">posix</span> filename expansion operators,
|
|
including <var>character classes</var>, <var>equivalence classes</var>, and
|
|
<var>collating symbols</var> (see <a href="#Filename-Expansion">Filename Expansion</a>).
|
|
|
|
<li>Bash implements extended pattern matching features when the <code>extglob</code>
|
|
shell option is enabled (see <a href="#Pattern-Matching">Pattern Matching</a>).
|
|
|
|
<li>It is possible to have a variable and a function with the same name;
|
|
<code>sh</code> does not separate the two name spaces.
|
|
|
|
<li>Bash functions are permitted to have local variables using the
|
|
<code>local</code> builtin, and thus useful recursive functions may be written
|
|
(see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<li>Variable assignments preceding commands affect only that command, even
|
|
builtins and functions (see <a href="#Environment">Environment</a>).
|
|
In <code>sh</code>, all variable assignments
|
|
preceding commands are global unless the command is executed from the
|
|
file system.
|
|
|
|
<li>Bash performs filename expansion on filenames specified as operands
|
|
to input and output redirection operators (see <a href="#Redirections">Redirections</a>).
|
|
|
|
<li>Bash contains the `<samp><span class="samp"><></span></samp>' redirection operator, allowing a file to be
|
|
opened for both reading and writing, and the `<samp><span class="samp">&></span></samp>' redirection
|
|
operator, for directing standard output and standard error to the same
|
|
file (see <a href="#Redirections">Redirections</a>).
|
|
|
|
<li>Bash includes the `<samp><span class="samp"><<<</span></samp>' redirection operator, allowing a string to
|
|
be used as the standard input to a command.
|
|
|
|
<li>Bash implements the `<samp><span class="samp">[n]<&</span><var>word</var></samp>' and `<samp><span class="samp">[n]>&</span><var>word</var></samp>'
|
|
redirection operators, which move one file descriptor to another.
|
|
|
|
<li>Bash treats a number of filenames specially when they are
|
|
used in redirection operators (see <a href="#Redirections">Redirections</a>).
|
|
|
|
<li>Bash can open network connections to arbitrary machines and services
|
|
with the redirection operators (see <a href="#Redirections">Redirections</a>).
|
|
|
|
<li>The <code>noclobber</code> option is available to avoid overwriting existing
|
|
files with output redirection (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
The `<samp><span class="samp">>|</span></samp>' redirection operator may be used to override <code>noclobber</code>.
|
|
|
|
<li>The Bash <code>cd</code> and <code>pwd</code> builtins (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
each take <samp><span class="option">-L</span></samp> and <samp><span class="option">-P</span></samp> options to switch between logical and
|
|
physical modes.
|
|
|
|
<li>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
|
|
<code>builtin</code> and <code>command</code> builtins (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<li>The <code>command</code> builtin allows selective disabling of functions
|
|
when command lookup is performed (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<li>Individual builtins may be enabled or disabled using the <code>enable</code>
|
|
builtin (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<li>The Bash <code>exec</code> 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
|
|
(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
<li>Shell functions may be exported to children via the environment
|
|
using <code>export -f</code> (see <a href="#Shell-Functions">Shell Functions</a>).
|
|
|
|
<li>The Bash <code>export</code>, <code>readonly</code>, and <code>declare</code> builtins can
|
|
take a <samp><span class="option">-f</span></samp> option to act on shell functions, a <samp><span class="option">-p</span></samp> option to
|
|
display variables with various attributes set in a format that can be
|
|
used as shell input, a <samp><span class="option">-n</span></samp> option to remove various variable
|
|
attributes, and `<samp><span class="samp">name=value</span></samp>' arguments to set variable attributes
|
|
and values simultaneously.
|
|
|
|
<li>The Bash <code>hash</code> builtin allows a name to be associated with
|
|
an arbitrary filename, even when that filename cannot be found by
|
|
searching the <samp><span class="env">$PATH</span></samp>, using `<samp><span class="samp">hash -p</span></samp>'
|
|
(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
<li>Bash includes a <code>help</code> builtin for quick reference to shell
|
|
facilities (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<li>The <code>printf</code> builtin is available to display formatted output
|
|
(see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<li>The Bash <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>)
|
|
will read a line ending in `<samp><span class="samp">\</span></samp>' with
|
|
the <samp><span class="option">-r</span></samp> option, and will use the <samp><span class="env">REPLY</span></samp> variable as a
|
|
default if no non-option arguments are supplied.
|
|
The Bash <code>read</code> builtin
|
|
also accepts a prompt string with the <samp><span class="option">-p</span></samp> option and will use
|
|
Readline to obtain the line when given the <samp><span class="option">-e</span></samp> option.
|
|
The <code>read</code> builtin also has additional options to control input:
|
|
the <samp><span class="option">-s</span></samp> option will turn off echoing of input characters as
|
|
they are read, the <samp><span class="option">-t</span></samp> option will allow <code>read</code> to time out
|
|
if input does not arrive within a specified number of seconds, the
|
|
<samp><span class="option">-n</span></samp> option will allow reading only a specified number of
|
|
characters rather than a full line, and the <samp><span class="option">-d</span></samp> option will read
|
|
until a particular character rather than newline.
|
|
|
|
<li>The <code>return</code> builtin may be used to abort execution of scripts
|
|
executed with the <code>.</code> or <code>source</code> builtins
|
|
(see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
<li>Bash includes the <code>shopt</code> builtin, for finer control of shell
|
|
optional capabilities (see <a href="#The-Shopt-Builtin">The Shopt Builtin</a>), and allows these options
|
|
to be set and unset at shell invocation (see <a href="#Invoking-Bash">Invoking Bash</a>).
|
|
|
|
<li>Bash has much more optional behavior controllable with the <code>set</code>
|
|
builtin (see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
<li>The `<samp><span class="samp">-x</span></samp>' (<code>xtrace</code>) option displays commands other than
|
|
simple commands when performing an execution trace
|
|
(see <a href="#The-Set-Builtin">The Set Builtin</a>).
|
|
|
|
<li>The <code>test</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>)
|
|
is slightly different, as it implements the <span class="sc">posix</span> algorithm,
|
|
which specifies the behavior based on the number of arguments.
|
|
|
|
<li>Bash includes the <code>caller</code> builtin, which displays the context of
|
|
any active subroutine call (a shell function or a script executed with
|
|
the <code>.</code> or <code>source</code> builtins). This supports the bash
|
|
debugger.
|
|
|
|
<li>The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a
|
|
<code>DEBUG</code> pseudo-signal specification, similar to <code>EXIT</code>.
|
|
Commands specified with a <code>DEBUG</code> trap are executed before every
|
|
simple command, <code>for</code> command, <code>case</code> command,
|
|
<code>select</code> command, every arithmetic <code>for</code> command, and before
|
|
the first command executes in a shell function.
|
|
The <code>DEBUG</code> trap is not inherited by shell functions unless the
|
|
function has been given the <code>trace</code> attribute or the
|
|
<code>functrace</code> option has been enabled using the <code>shopt</code> builtin.
|
|
The <code>extdebug</code> shell option has additional effects on the
|
|
<code>DEBUG</code> trap.
|
|
|
|
<p>The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows an
|
|
<code>ERR</code> pseudo-signal specification, similar to <code>EXIT</code> and <code>DEBUG</code>.
|
|
Commands specified with an <code>ERR</code> trap are executed after a simple
|
|
command fails, with a few exceptions.
|
|
The <code>ERR</code> trap is not inherited by shell functions unless the
|
|
<code>-o errtrace</code> option to the <code>set</code> builtin is enabled.
|
|
|
|
<p>The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a
|
|
<code>RETURN</code> pseudo-signal specification, similar to
|
|
<code>EXIT</code> and <code>DEBUG</code>.
|
|
Commands specified with an <code>RETURN</code> trap are executed before
|
|
execution resumes after a shell function or a shell script executed with
|
|
<code>.</code> or <code>source</code> returns.
|
|
The <code>RETURN</code> trap is not inherited by shell functions unless the
|
|
function has been given the <code>trace</code> attribute or the
|
|
<code>functrace</code> option has been enabled using the <code>shopt</code> builtin.
|
|
|
|
<li>The Bash <code>type</code> builtin is more extensive and gives more information
|
|
about the names it finds (see <a href="#Bash-Builtins">Bash Builtins</a>).
|
|
|
|
<li>The Bash <code>umask</code> builtin permits a <samp><span class="option">-p</span></samp> option to cause
|
|
the output to be displayed in the form of a <code>umask</code> command
|
|
that may be reused as input (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
|
|
|
|
<li>Bash implements a <code>csh</code>-like directory stack, and provides the
|
|
<code>pushd</code>, <code>popd</code>, and <code>dirs</code> builtins to manipulate it
|
|
(see <a href="#The-Directory-Stack">The Directory Stack</a>).
|
|
Bash also makes the directory stack visible as the value of the
|
|
<samp><span class="env">DIRSTACK</span></samp> shell variable.
|
|
|
|
<li>Bash interprets special backslash-escaped characters in the prompt
|
|
strings when interactive (see <a href="#Printing-a-Prompt">Printing a Prompt</a>).
|
|
|
|
<li>The Bash restricted mode is more useful (see <a href="#The-Restricted-Shell">The Restricted Shell</a>);
|
|
the SVR4.2 shell restricted mode is too limited.
|
|
|
|
<li>The <code>disown</code> builtin can remove a job from the internal shell
|
|
job table (see <a href="#Job-Control-Builtins">Job Control Builtins</a>) or suppress the sending
|
|
of <code>SIGHUP</code> to a job when the shell exits as the result of a
|
|
<code>SIGHUP</code>.
|
|
|
|
<li>Bash includes a number of features to support a separate debugger for
|
|
shell scripts.
|
|
|
|
<li>The SVR4.2 shell has two privilege-related builtins
|
|
(<code>mldmode</code> and <code>priv</code>) not present in Bash.
|
|
|
|
<li>Bash does not have the <code>stop</code> or <code>newgrp</code> builtins.
|
|
|
|
<li>Bash does not use the <samp><span class="env">SHACCT</span></samp> variable or perform shell accounting.
|
|
|
|
<li>The SVR4.2 <code>sh</code> uses a <samp><span class="env">TIMEOUT</span></samp> variable like Bash uses
|
|
<samp><span class="env">TMOUT</span></samp>.
|
|
|
|
</ul>
|
|
|
|
<p class="noindent">More features unique to Bash may be found in <a href="#Bash-Features">Bash Features</a>.
|
|
|
|
<h3 class="appendixsec">B.1 Implementation Differences From The SVR4.2 Shell</h3>
|
|
|
|
<p>Since Bash is a completely new implementation, it does not suffer from
|
|
many of the limitations of the SVR4.2 shell. For instance:
|
|
|
|
<ul>
|
|
<li>Bash does not fork a subshell when redirecting into or out of
|
|
a shell control structure such as an <code>if</code> or <code>while</code>
|
|
statement.
|
|
|
|
<li>Bash does not allow unbalanced quotes. The SVR4.2 shell will silently
|
|
insert a needed closing quote at <code>EOF</code> under certain circumstances.
|
|
This can be the cause of some hard-to-find errors.
|
|
|
|
<li>The SVR4.2 shell uses a baroque memory management scheme based on
|
|
trapping <code>SIGSEGV</code>. If the shell is started from a process with
|
|
<code>SIGSEGV</code> blocked (e.g., by using the <code>system()</code> C library
|
|
function call), it misbehaves badly.
|
|
|
|
<li>In a questionable attempt at security, the SVR4.2 shell,
|
|
when invoked without the <samp><span class="option">-p</span></samp> option, will alter its real
|
|
and effective <span class="sc">uid</span> and <span class="sc">gid</span> if they are less than some
|
|
magic threshold value, commonly 100.
|
|
This can lead to unexpected results.
|
|
|
|
<li>The SVR4.2 shell does not allow users to trap <code>SIGSEGV</code>,
|
|
<code>SIGALRM</code>, or <code>SIGCHLD</code>.
|
|
|
|
<li>The SVR4.2 shell does not allow the <samp><span class="env">IFS</span></samp>, <samp><span class="env">MAILCHECK</span></samp>,
|
|
<samp><span class="env">PATH</span></samp>, <samp><span class="env">PS1</span></samp>, or <samp><span class="env">PS2</span></samp> variables to be unset.
|
|
|
|
<li>The SVR4.2 shell treats `<samp><span class="samp">^</span></samp>' as the undocumented equivalent of
|
|
`<samp><span class="samp">|</span></samp>'.
|
|
|
|
<li>Bash allows multiple option arguments when it is invoked (<code>-x -v</code>);
|
|
the SVR4.2 shell allows only one option argument (<code>-xv</code>). In
|
|
fact, some versions of the shell dump core if the second argument begins
|
|
with a `<samp><span class="samp">-</span></samp>'.
|
|
|
|
<li>The SVR4.2 shell exits a script if any builtin fails; Bash exits
|
|
a script only if one of the <span class="sc">posix</span> special builtins fails, and
|
|
only for certain failures, as enumerated in the <span class="sc">posix</span> standard.
|
|
|
|
<li>The SVR4.2 shell behaves differently when invoked as <code>jsh</code>
|
|
(it turns on job control).
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Copying-This-Manual"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Builtin-Index">Builtin Index</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Major-Differences-From-The-Bourne-Shell">Major Differences From The Bourne Shell</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="appendix">Appendix C Copying This Manual</h2>
|
|
|
|
<ul class="menu">
|
|
<li><a accesskey="1" href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>: License for copying this manual.
|
|
</ul>
|
|
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="GNU-Free-Documentation-License"></a>
|
|
Up: <a rel="up" accesskey="u" href="#Copying-This-Manual">Copying This Manual</a>
|
|
|
|
</div>
|
|
|
|
<h3 class="appendixsec">C.1 GNU Free Documentation License</h3>
|
|
|
|
<p><a name="index-FDL_002c-GNU-Free-Documentation-License-385"></a><div align="center">Version 1.2, November 2002</div>
|
|
|
|
<pre class="display"> Copyright © 2000,2001,2002 Free Software Foundation, Inc.
|
|
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
|
|
|
|
Everyone is permitted to copy and distribute verbatim copies
|
|
of this license document, but changing it is not allowed.
|
|
</pre>
|
|
<ol type=1 start=0>
|
|
<li>PREAMBLE
|
|
|
|
<p>The purpose of this License is to make a manual, textbook, or other
|
|
functional and useful document <dfn>free</dfn> 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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<li>APPLICABILITY AND DEFINITIONS
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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”.
|
|
|
|
<p>Examples of suitable formats for Transparent copies include plain
|
|
<span class="sc">ascii</span> without markup, Texinfo input format, LaTeX input
|
|
format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available
|
|
<acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>,
|
|
PostScript or <acronym>PDF</acronym> designed for human modification. Examples
|
|
of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and
|
|
<acronym>JPG</acronym>. Opaque formats include proprietary formats that can be
|
|
read and edited only by proprietary word processors, <acronym>SGML</acronym> or
|
|
<acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are
|
|
not generally available, and the machine-generated <acronym>HTML</acronym>,
|
|
PostScript or <acronym>PDF</acronym> produced by some word processors for
|
|
output purposes only.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<li>VERBATIM COPYING
|
|
|
|
<p>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.
|
|
|
|
<p>You may also lend copies, under the same conditions stated above, and
|
|
you may publicly display copies.
|
|
|
|
<li>COPYING IN QUANTITY
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<li>MODIFICATIONS
|
|
|
|
<p>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:
|
|
|
|
<ol type=A start=1>
|
|
<li>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.
|
|
|
|
<li>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.
|
|
|
|
<li>State on the Title page the name of the publisher of the
|
|
Modified Version, as the publisher.
|
|
|
|
<li>Preserve all the copyright notices of the Document.
|
|
|
|
<li>Add an appropriate copyright notice for your modifications
|
|
adjacent to the other copyright notices.
|
|
|
|
<li>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.
|
|
|
|
<li>Preserve in that license notice the full lists of Invariant Sections
|
|
and required Cover Texts given in the Document's license notice.
|
|
|
|
<li>Include an unaltered copy of this License.
|
|
|
|
<li>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.
|
|
|
|
<li>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.
|
|
|
|
<li>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.
|
|
|
|
<li>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.
|
|
|
|
<li>Delete any section Entitled “Endorsements”. Such a section
|
|
may not be included in the Modified Version.
|
|
|
|
<li>Do not retitle any existing section to be Entitled “Endorsements” or
|
|
to conflict in title with any Invariant Section.
|
|
|
|
<li>Preserve any Warranty Disclaimers.
|
|
</ol>
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<li>COMBINING DOCUMENTS
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<p>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.”
|
|
|
|
<li>COLLECTIONS OF DOCUMENTS
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<li>AGGREGATION WITH INDEPENDENT WORKS
|
|
|
|
<p>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 an aggregate, this License does not
|
|
apply to the other works in the aggregate which are not themselves
|
|
derivative works of the Document.
|
|
|
|
<p>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.
|
|
|
|
<li>TRANSLATION
|
|
|
|
<p>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.
|
|
|
|
<p>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.
|
|
|
|
<li>TERMINATION
|
|
|
|
<p>You may not copy, modify, sublicense, or distribute the Document except
|
|
as expressly provided for under this License. Any other attempt to
|
|
copy, modify, sublicense or distribute the Document is void, and will
|
|
automatically terminate your rights under this License. However,
|
|
parties who have received copies, or rights, from you under this
|
|
License will not have their licenses terminated so long as such
|
|
parties remain in full compliance.
|
|
|
|
<li>FUTURE REVISIONS OF THIS LICENSE
|
|
|
|
<p>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
|
|
<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
|
|
|
|
<p>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.
|
|
</ol>
|
|
|
|
<h4 class="appendixsubsec">C.1.1 ADDENDUM: How to use this License for your documents</h4>
|
|
|
|
<p>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:
|
|
|
|
<pre class="smallexample"> Copyright (C) <var>year</var> <var>your name</var>.
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
under the terms of the GNU Free Documentation License, Version 1.2
|
|
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''.
|
|
</pre>
|
|
<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
|
replace the “with...Texts.” line with this:
|
|
|
|
<pre class="smallexample"> with the Invariant Sections being <var>list their titles</var>, with
|
|
the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
|
|
being <var>list</var>.
|
|
</pre>
|
|
<p>If you have Invariant Sections without Cover Texts, or some other
|
|
combination of the three, merge those two alternatives to suit the
|
|
situation.
|
|
|
|
<p>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.
|
|
|
|
<!-- Local Variables: -->
|
|
<!-- ispell-local-pdict: "ispell-dict" -->
|
|
<!-- End: -->
|
|
<div class="node">
|
|
<p><hr>
|
|
<a name="Builtin-Index"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Reserved-Word-Index">Reserved Word Index</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Copying-This-Manual">Copying This Manual</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="unnumbered">Index of Shell Builtin Commands</h2>
|
|
|
|
<ul class="index-bt" compact>
|
|
<li><a href="#index-g_t_002e-107"><code>.</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-g_t_003a-106"><code>:</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-g_t_005b-122"><code>[</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-alias-127"><code>alias</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-bg-256"><code>bg</code></a>: <a href="#Job-Control-Builtins">Job Control Builtins</a></li>
|
|
<li><a href="#index-bind-128"><code>bind</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-break-108"><code>break</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-builtin-129"><code>builtin</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-caller-130"><code>caller</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-cd-109"><code>cd</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-command-131"><code>command</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-compgen-370"><code>compgen</code></a>: <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></li>
|
|
<li><a href="#index-complete-371"><code>complete</code></a>: <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></li>
|
|
<li><a href="#index-continue-110"><code>continue</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-declare-132"><code>declare</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-dirs-246"><code>dirs</code></a>: <a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></li>
|
|
<li><a href="#index-disown-261"><code>disown</code></a>: <a href="#Job-Control-Builtins">Job Control Builtins</a></li>
|
|
<li><a href="#index-echo-133"><code>echo</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-enable-134"><code>enable</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-eval-111"><code>eval</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-exec-112"><code>exec</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-exit-113"><code>exit</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-export-114"><code>export</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-fc-376"><code>fc</code></a>: <a href="#Bash-History-Builtins">Bash History Builtins</a></li>
|
|
<li><a href="#index-fg-257"><code>fg</code></a>: <a href="#Job-Control-Builtins">Job Control Builtins</a></li>
|
|
<li><a href="#index-getopts-115"><code>getopts</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-hash-116"><code>hash</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-help-135"><code>help</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-history-377"><code>history</code></a>: <a href="#Bash-History-Builtins">Bash History Builtins</a></li>
|
|
<li><a href="#index-jobs-258"><code>jobs</code></a>: <a href="#Job-Control-Builtins">Job Control Builtins</a></li>
|
|
<li><a href="#index-kill-259"><code>kill</code></a>: <a href="#Job-Control-Builtins">Job Control Builtins</a></li>
|
|
<li><a href="#index-let-136"><code>let</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-local-137"><code>local</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-logout-138"><code>logout</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-popd-247"><code>popd</code></a>: <a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></li>
|
|
<li><a href="#index-printf-139"><code>printf</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-pushd-248"><code>pushd</code></a>: <a href="#Directory-Stack-Builtins">Directory Stack Builtins</a></li>
|
|
<li><a href="#index-pwd-117"><code>pwd</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-read-140"><code>read</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-readonly-118"><code>readonly</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-return-119"><code>return</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-set-146"><code>set</code></a>: <a href="#The-Set-Builtin">The Set Builtin</a></li>
|
|
<li><a href="#index-shift-120"><code>shift</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-shopt-147"><code>shopt</code></a>: <a href="#The-Shopt-Builtin">The Shopt Builtin</a></li>
|
|
<li><a href="#index-source-141"><code>source</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-suspend-262"><code>suspend</code></a>: <a href="#Job-Control-Builtins">Job Control Builtins</a></li>
|
|
<li><a href="#index-test-121"><code>test</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-times-123"><code>times</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-trap-124"><code>trap</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-type-142"><code>type</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-typeset-143"><code>typeset</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-ulimit-144"><code>ulimit</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-umask-125"><code>umask</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-unalias-145"><code>unalias</code></a>: <a href="#Bash-Builtins">Bash Builtins</a></li>
|
|
<li><a href="#index-unset-126"><code>unset</code></a>: <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a></li>
|
|
<li><a href="#index-wait-260"><code>wait</code></a>: <a href="#Job-Control-Builtins">Job Control Builtins</a></li>
|
|
</ul><div class="node">
|
|
<p><hr>
|
|
<a name="Reserved-Word-Index"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Variable-Index">Variable Index</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Builtin-Index">Builtin Index</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="unnumbered">Index of Shell Reserved Words</h2>
|
|
|
|
|
|
|
|
<ul class="index-rw" compact>
|
|
<li><a href="#index-g_t_0021-37"><code>!</code></a>: <a href="#Pipelines">Pipelines</a></li>
|
|
<li><a href="#index-g_t_005b_005b-57"><code>[[</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-g_t_005d_005d-58"><code>]]</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-case-53"><code>case</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-do-43"><code>do</code></a>: <a href="#Looping-Constructs">Looping Constructs</a></li>
|
|
<li><a href="#index-done-44"><code>done</code></a>: <a href="#Looping-Constructs">Looping Constructs</a></li>
|
|
<li><a href="#index-elif-51"><code>elif</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-else-50"><code>else</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-esac-55"><code>esac</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-fi-52"><code>fi</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-for-46"><code>for</code></a>: <a href="#Looping-Constructs">Looping Constructs</a></li>
|
|
<li><a href="#index-function-64"><code>function</code></a>: <a href="#Shell-Functions">Shell Functions</a></li>
|
|
<li><a href="#index-if-48"><code>if</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-in-54"><code>in</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-select-56"><code>select</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-then-49"><code>then</code></a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-time-36"><code>time</code></a>: <a href="#Pipelines">Pipelines</a></li>
|
|
<li><a href="#index-until-42"><code>until</code></a>: <a href="#Looping-Constructs">Looping Constructs</a></li>
|
|
<li><a href="#index-while-45"><code>while</code></a>: <a href="#Looping-Constructs">Looping Constructs</a></li>
|
|
<li><a href="#index-g_t_0040_007b-60"><code>{</code></a>: <a href="#Command-Grouping">Command Grouping</a></li>
|
|
<li><a href="#index-g_t_0040_007d-61"><code>}</code></a>: <a href="#Command-Grouping">Command Grouping</a></li>
|
|
</ul><div class="node">
|
|
<p><hr>
|
|
<a name="Variable-Index"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Function-Index">Function Index</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Reserved-Word-Index">Reserved Word Index</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="unnumbered">Parameter and Variable Index</h2>
|
|
|
|
|
|
|
|
<ul class="index-vr" compact>
|
|
<li><a href="#index-g_t_0021-76"><code>!</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t_0023-72"><code>#</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t_0024-75"><code>$</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t_002a-70"><code>*</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t_002d-74"><code>-</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t0-77"><code>0</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t_003f-73"><code>?</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t_0040_0040-71"><code>@</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-g_t_005f-78"><code>_</code></a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-auto_005fresume-263"><code>auto_resume</code></a>: <a href="#Job-Control-Variables">Job Control Variables</a></li>
|
|
<li><a href="#index-BASH-159"><code>BASH</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fARGC-161"><code>BASH_ARGC</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fARGV-162"><code>BASH_ARGV</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fCOMMAND-163"><code>BASH_COMMAND</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fENV-164"><code>BASH_ENV</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fEXECUTION_005fSTRING-165"><code>BASH_EXECUTION_STRING</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fLINENO-166"><code>BASH_LINENO</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fREMATCH-167"><code>BASH_REMATCH</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fSOURCE-168"><code>BASH_SOURCE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fSUBSHELL-169"><code>BASH_SUBSHELL</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fVERSINFO-170"><code>BASH_VERSINFO</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASH_005fVERSION-171"><code>BASH_VERSION</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-BASHPID-160"><code>BASHPID</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-bell_002dstyle-274"><code>bell-style</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-bind_002dtty_002dspecial_002dchars-275"><code>bind-tty-special-chars</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-CDPATH-149"><code>CDPATH</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-COLUMNS-172"><code>COLUMNS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-comment_002dbegin-276"><code>comment-begin</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-COMP_005fCWORD-173"><code>COMP_CWORD</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-COMP_005fKEY-177"><code>COMP_KEY</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-COMP_005fLINE-174"><code>COMP_LINE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-COMP_005fPOINT-175"><code>COMP_POINT</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-COMP_005fTYPE-176"><code>COMP_TYPE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-COMP_005fWORDBREAKS-178"><code>COMP_WORDBREAKS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-COMP_005fWORDS-179"><code>COMP_WORDS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-completion_002dquery_002ditems-277"><code>completion-query-items</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-COMPREPLY-180"><code>COMPREPLY</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-convert_002dmeta-278"><code>convert-meta</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-DIRSTACK-181"><code>DIRSTACK</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-disable_002dcompletion-279"><code>disable-completion</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-editing_002dmode-280"><code>editing-mode</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-EMACS-182"><code>EMACS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-enable_002dkeypad-281"><code>enable-keypad</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-EUID-183"><code>EUID</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-expand_002dtilde-282"><code>expand-tilde</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-FCEDIT-184"><code>FCEDIT</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-FIGNORE-185"><code>FIGNORE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-FUNCNAME-186"><code>FUNCNAME</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-GLOBIGNORE-187"><code>GLOBIGNORE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-GROUPS-188"><code>GROUPS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-histchars-189"><code>histchars</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HISTCMD-190"><code>HISTCMD</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HISTCONTROL-191"><code>HISTCONTROL</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HISTFILE-192"><code>HISTFILE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HISTFILESIZE-193"><code>HISTFILESIZE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HISTIGNORE-194"><code>HISTIGNORE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-history_002dpreserve_002dpoint-283"><code>history-preserve-point</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-HISTSIZE-195"><code>HISTSIZE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HISTTIMEFORMAT-196"><code>HISTTIMEFORMAT</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HOME-150"><code>HOME</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-horizontal_002dscroll_002dmode-284"><code>horizontal-scroll-mode</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-HOSTFILE-197"><code>HOSTFILE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HOSTNAME-198"><code>HOSTNAME</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-HOSTTYPE-199"><code>HOSTTYPE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-IFS-151"><code>IFS</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-IGNOREEOF-200"><code>IGNOREEOF</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-input_002dmeta-285"><code>input-meta</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-INPUTRC-201"><code>INPUTRC</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-isearch_002dterminators-287"><code>isearch-terminators</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-keymap-288"><code>keymap</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-LANG-202"><code>LANG</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-LC_005fALL-203"><code>LC_ALL</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-LC_005fCOLLATE-204"><code>LC_COLLATE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-LC_005fCTYPE-205"><code>LC_CTYPE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-LC_005fMESSAGES-28"><code>LC_MESSAGES</code></a>: <a href="#Locale-Translation">Locale Translation</a></li>
|
|
<li><a href="#index-LC_005fMESSAGES-206"><code>LC_MESSAGES</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-LC_005fNUMERIC-207"><code>LC_NUMERIC</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-LINENO-208"><code>LINENO</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-LINES-209"><code>LINES</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-MACHTYPE-210"><code>MACHTYPE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-MAIL-152"><code>MAIL</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-MAILCHECK-211"><code>MAILCHECK</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-MAILPATH-153"><code>MAILPATH</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-mark_002dmodified_002dlines-289"><code>mark-modified-lines</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-mark_002dsymlinked_002ddirectories-290"><code>mark-symlinked-directories</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-match_002dhidden_002dfiles-291"><code>match-hidden-files</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-meta_002dflag-286"><code>meta-flag</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-OLDPWD-212"><code>OLDPWD</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-OPTARG-154"><code>OPTARG</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-OPTERR-213"><code>OPTERR</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-OPTIND-155"><code>OPTIND</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-OSTYPE-214"><code>OSTYPE</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-output_002dmeta-292"><code>output-meta</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-page_002dcompletions-293"><code>page-completions</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-PATH-156"><code>PATH</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-PIPESTATUS-215"><code>PIPESTATUS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-POSIXLY_005fCORRECT-216"><code>POSIXLY_CORRECT</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-PPID-217"><code>PPID</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-PROMPT_005fCOMMAND-218"><code>PROMPT_COMMAND</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-PS1-157"><code>PS1</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-PS2-158"><code>PS2</code></a>: <a href="#Bourne-Shell-Variables">Bourne Shell Variables</a></li>
|
|
<li><a href="#index-PS3-219"><code>PS3</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-PS4-220"><code>PS4</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-PWD-221"><code>PWD</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-RANDOM-222"><code>RANDOM</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-REPLY-223"><code>REPLY</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-SECONDS-224"><code>SECONDS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-SHELL-225"><code>SHELL</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-SHELLOPTS-226"><code>SHELLOPTS</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-SHLVL-227"><code>SHLVL</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-show_002dall_002dif_002dambiguous-294"><code>show-all-if-ambiguous</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-show_002dall_002dif_002dunmodified-295"><code>show-all-if-unmodified</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-TEXTDOMAIN-29"><code>TEXTDOMAIN</code></a>: <a href="#Locale-Translation">Locale Translation</a></li>
|
|
<li><a href="#index-TEXTDOMAINDIR-30"><code>TEXTDOMAINDIR</code></a>: <a href="#Locale-Translation">Locale Translation</a></li>
|
|
<li><a href="#index-TIMEFORMAT-228"><code>TIMEFORMAT</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-TMOUT-229"><code>TMOUT</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-TMPDIR-230"><code>TMPDIR</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-UID-231"><code>UID</code></a>: <a href="#Bash-Variables">Bash Variables</a></li>
|
|
<li><a href="#index-visible_002dstats-296"><code>visible-stats</code></a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
</ul><div class="node">
|
|
<p><hr>
|
|
<a name="Function-Index"></a>
|
|
Next: <a rel="next" accesskey="n" href="#Concept-Index">Concept Index</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="#Variable-Index">Variable Index</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="unnumbered">Function Index</h2>
|
|
|
|
|
|
|
|
<ul class="index-fn" compact>
|
|
<li><a href="#index-abort-_0028C_002dg_0029-355"><code>abort (C-g)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-accept_002dline-_0028Newline-or-Return_0029-305"><code>accept-line (Newline or Return)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-backward_002dchar-_0028C_002db_0029-300"><code>backward-char (C-b)</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-backward_002ddelete_002dchar-_0028Rubout_0029-319"><code>backward-delete-char (Rubout)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029-330"><code>backward-kill-line (C-x Rubout)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-backward_002dkill_002dword-_0028M_002d_0040key_007bDEL_007d_0029-334"><code>backward-kill-word (M-<DEL>)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-backward_002dword-_0028M_002db_0029-302"><code>backward-word (M-b)</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-beginning_002dof_002dhistory-_0028M_002d_003c_0029-308"><code>beginning-of-history (M-<)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-beginning_002dof_002dline-_0028C_002da_0029-297"><code>beginning-of-line (C-a)</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029-353"><code>call-last-kbd-macro (C-x e)</code></a>: <a href="#Keyboard-Macros">Keyboard Macros</a></li>
|
|
<li><a href="#index-capitalize_002dword-_0028M_002dc_0029-327"><code>capitalize-word (M-c)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-character_002dsearch-_0028C_002d_005d_0029-362"><code>character-search (C-])</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029-363"><code>character-search-backward (M-C-])</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-clear_002dscreen-_0028C_002dl_0029-303"><code>clear-screen (C-l)</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-complete-_0028_0040key_007bTAB_007d_0029-346"><code>complete (<TAB>)</code></a>: <a href="#Commands-For-Completion">Commands For Completion</a></li>
|
|
<li><a href="#index-copy_002dbackward_002dword-_0028_0029-340"><code>copy-backward-word ()</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-copy_002dforward_002dword-_0028_0029-341"><code>copy-forward-word ()</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-copy_002dregion_002das_002dkill-_0028_0029-339"><code>copy-region-as-kill ()</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-delete_002dchar-_0028C_002dd_0029-318"><code>delete-char (C-d)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-delete_002dchar_002dor_002dlist-_0028_0029-350"><code>delete-char-or-list ()</code></a>: <a href="#Commands-For-Completion">Commands For Completion</a></li>
|
|
<li><a href="#index-delete_002dhorizontal_002dspace-_0028_0029-337"><code>delete-horizontal-space ()</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-digit_002dargument-_0028_0040kbd_007bM_002d0_007d_002c-_0040kbd_007bM_002d1_007d_002c-_0040dots_007b_007d-_0040kbd_007bM_002d_002d_007d_0029-344"><code>digit-argument (</code><kbd>M-0</kbd><code>, </code><kbd>M-1</kbd><code>, ... </code><kbd>M--</kbd><code>)</code></a>: <a href="#Numeric-Arguments">Numeric Arguments</a></li>
|
|
<li><a href="#index-do_002duppercase_002dversion-_0028M_002da_002c-M_002db_002c-M_002d_0040var_007bx_007d_002c-_0040dots_007b_007d_0029-356"><code>do-uppercase-version (M-a, M-b, M-</code><var>x</var><code>, ...)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-downcase_002dword-_0028M_002dl_0029-326"><code>downcase-word (M-l)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-dump_002dfunctions-_0028_0029-365"><code>dump-functions ()</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-dump_002dmacros-_0028_0029-367"><code>dump-macros ()</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-dump_002dvariables-_0028_0029-366"><code>dump-variables ()</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029-352"><code>end-kbd-macro (C-x ))</code></a>: <a href="#Keyboard-Macros">Keyboard Macros</a></li>
|
|
<li><a href="#index-end_002dof_002dhistory-_0028M_002d_003e_0029-309"><code>end-of-history (M->)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-end_002dof_002dline-_0028C_002de_0029-298"><code>end-of-line (C-e)</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029-361"><code>exchange-point-and-mark (C-x C-x)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-forward_002dbackward_002ddelete_002dchar-_0028_0029-320"><code>forward-backward-delete-char ()</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-forward_002dchar-_0028C_002df_0029-299"><code>forward-char (C-f)</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-forward_002dsearch_002dhistory-_0028C_002ds_0029-311"><code>forward-search-history (C-s)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-forward_002dword-_0028M_002df_0029-301"><code>forward-word (M-f)</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-history_002dsearch_002dbackward-_0028_0029-315"><code>history-search-backward ()</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-history_002dsearch_002dforward-_0028_0029-314"><code>history-search-forward ()</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-insert_002dcomment-_0028M_002d_0023_0029-364"><code>insert-comment (M-#)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-insert_002dcompletions-_0028M_002d_002a_0029-348"><code>insert-completions (M-*)</code></a>: <a href="#Commands-For-Completion">Commands For Completion</a></li>
|
|
<li><a href="#index-kill_002dline-_0028C_002dk_0029-329"><code>kill-line (C-k)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-kill_002dregion-_0028_0029-338"><code>kill-region ()</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-kill_002dwhole_002dline-_0028_0029-332"><code>kill-whole-line ()</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-kill_002dword-_0028M_002dd_0029-333"><code>kill-word (M-d)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-menu_002dcomplete-_0028_0029-349"><code>menu-complete ()</code></a>: <a href="#Commands-For-Completion">Commands For Completion</a></li>
|
|
<li><a href="#index-next_002dhistory-_0028C_002dn_0029-307"><code>next-history (C-n)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029-313"><code>non-incremental-forward-search-history (M-n)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029-312"><code>non-incremental-reverse-search-history (M-p)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-overwrite_002dmode-_0028_0029-328"><code>overwrite-mode ()</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-possible_002dcompletions-_0028M_002d_003f_0029-347"><code>possible-completions (M-?)</code></a>: <a href="#Commands-For-Completion">Commands For Completion</a></li>
|
|
<li><a href="#index-prefix_002dmeta-_0028_0040key_007bESC_007d_0029-357"><code>prefix-meta (<ESC>)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-previous_002dhistory-_0028C_002dp_0029-306"><code>previous-history (C-p)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029-321"><code>quoted-insert (C-q or C-v)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029-354"><code>re-read-init-file (C-x C-r)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-redraw_002dcurrent_002dline-_0028_0029-304"><code>redraw-current-line ()</code></a>: <a href="#Commands-For-Moving">Commands For Moving</a></li>
|
|
<li><a href="#index-reverse_002dsearch_002dhistory-_0028C_002dr_0029-310"><code>reverse-search-history (C-r)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-revert_002dline-_0028M_002dr_0029-359"><code>revert-line (M-r)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_0040dots_007b_007d_0029-322"><code>self-insert (a, b, A, 1, !, ...)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-set_002dmark-_0028C_002d_0040_0040_0029-360"><code>set-mark (C-@)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029-351"><code>start-kbd-macro (C-x ()</code></a>: <a href="#Keyboard-Macros">Keyboard Macros</a></li>
|
|
<li><a href="#index-transpose_002dchars-_0028C_002dt_0029-323"><code>transpose-chars (C-t)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-transpose_002dwords-_0028M_002dt_0029-324"><code>transpose-words (M-t)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029-358"><code>undo (C-_ or C-x C-u)</code></a>: <a href="#Miscellaneous-Commands">Miscellaneous Commands</a></li>
|
|
<li><a href="#index-universal_002dargument-_0028_0029-345"><code>universal-argument ()</code></a>: <a href="#Numeric-Arguments">Numeric Arguments</a></li>
|
|
<li><a href="#index-unix_002dfilename_002drubout-_0028_0029-336"><code>unix-filename-rubout ()</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-unix_002dline_002ddiscard-_0028C_002du_0029-331"><code>unix-line-discard (C-u)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-unix_002dword_002drubout-_0028C_002dw_0029-335"><code>unix-word-rubout (C-w)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-upcase_002dword-_0028M_002du_0029-325"><code>upcase-word (M-u)</code></a>: <a href="#Commands-For-Text">Commands For Text</a></li>
|
|
<li><a href="#index-yank-_0028C_002dy_0029-342"><code>yank (C-y)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
<li><a href="#index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029-317"><code>yank-last-arg (M-. or M-_)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-yank_002dnth_002darg-_0028M_002dC_002dy_0029-316"><code>yank-nth-arg (M-C-y)</code></a>: <a href="#Commands-For-History">Commands For History</a></li>
|
|
<li><a href="#index-yank_002dpop-_0028M_002dy_0029-343"><code>yank-pop (M-y)</code></a>: <a href="#Commands-For-Killing">Commands For Killing</a></li>
|
|
</ul><div class="node">
|
|
<p><hr>
|
|
<a name="Concept-Index"></a>
|
|
Previous: <a rel="previous" accesskey="p" href="#Function-Index">Function Index</a>,
|
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
|
|
|
</div>
|
|
|
|
<h2 class="unnumbered">Concept Index</h2>
|
|
|
|
|
|
|
|
<ul class="index-cp" compact>
|
|
<li><a href="#index-alias-expansion-243">alias expansion</a>: <a href="#Aliases">Aliases</a></li>
|
|
<li><a href="#index-arithmetic-evaluation-242">arithmetic evaluation</a>: <a href="#Shell-Arithmetic">Shell Arithmetic</a></li>
|
|
<li><a href="#index-arithmetic-expansion-88">arithmetic expansion</a>: <a href="#Arithmetic-Expansion">Arithmetic Expansion</a></li>
|
|
<li><a href="#index-arithmetic_002c-shell-238">arithmetic, shell</a>: <a href="#Shell-Arithmetic">Shell Arithmetic</a></li>
|
|
<li><a href="#index-arrays-244">arrays</a>: <a href="#Arrays">Arrays</a></li>
|
|
<li><a href="#index-background-254">background</a>: <a href="#Job-Control-Basics">Job Control Basics</a></li>
|
|
<li><a href="#index-Bash-configuration-384">Bash configuration</a>: <a href="#Basic-Installation">Basic Installation</a></li>
|
|
<li><a href="#index-Bash-installation-383">Bash installation</a>: <a href="#Basic-Installation">Basic Installation</a></li>
|
|
<li><a href="#index-Bourne-shell-21">Bourne shell</a>: <a href="#Basic-Shell-Features">Basic Shell Features</a></li>
|
|
<li><a href="#index-brace-expansion-80">brace expansion</a>: <a href="#Brace-Expansion">Brace Expansion</a></li>
|
|
<li><a href="#index-builtin-2">builtin</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-command-editing-267">command editing</a>: <a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></li>
|
|
<li><a href="#index-command-execution-99">command execution</a>: <a href="#Command-Search-and-Execution">Command Search and Execution</a></li>
|
|
<li><a href="#index-command-expansion-98">command expansion</a>: <a href="#Simple-Command-Expansion">Simple Command Expansion</a></li>
|
|
<li><a href="#index-command-history-373">command history</a>: <a href="#Bash-History-Facilities">Bash History Facilities</a></li>
|
|
<li><a href="#index-command-search-100">command search</a>: <a href="#Command-Search-and-Execution">Command Search and Execution</a></li>
|
|
<li><a href="#index-command-substitution-86">command substitution</a>: <a href="#Command-Substitution">Command Substitution</a></li>
|
|
<li><a href="#index-command-timing-38">command timing</a>: <a href="#Pipelines">Pipelines</a></li>
|
|
<li><a href="#index-commands_002c-compound-40">commands, compound</a>: <a href="#Compound-Commands">Compound Commands</a></li>
|
|
<li><a href="#index-commands_002c-conditional-47">commands, conditional</a>: <a href="#Conditional-Constructs">Conditional Constructs</a></li>
|
|
<li><a href="#index-commands_002c-grouping-59">commands, grouping</a>: <a href="#Command-Grouping">Command Grouping</a></li>
|
|
<li><a href="#index-commands_002c-lists-39">commands, lists</a>: <a href="#Lists">Lists</a></li>
|
|
<li><a href="#index-commands_002c-looping-41">commands, looping</a>: <a href="#Looping-Constructs">Looping Constructs</a></li>
|
|
<li><a href="#index-commands_002c-pipelines-35">commands, pipelines</a>: <a href="#Pipelines">Pipelines</a></li>
|
|
<li><a href="#index-commands_002c-shell-32">commands, shell</a>: <a href="#Shell-Commands">Shell Commands</a></li>
|
|
<li><a href="#index-commands_002c-simple-33">commands, simple</a>: <a href="#Simple-Commands">Simple Commands</a></li>
|
|
<li><a href="#index-comments_002c-shell-31">comments, shell</a>: <a href="#Comments">Comments</a></li>
|
|
<li><a href="#index-completion-builtins-369">completion builtins</a>: <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></li>
|
|
<li><a href="#index-configuration-382">configuration</a>: <a href="#Basic-Installation">Basic Installation</a></li>
|
|
<li><a href="#index-control-operator-3">control operator</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-directory-stack-245">directory stack</a>: <a href="#The-Directory-Stack">The Directory Stack</a></li>
|
|
<li><a href="#index-editing-command-lines-268">editing command lines</a>: <a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></li>
|
|
<li><a href="#index-environment-102">environment</a>: <a href="#Environment">Environment</a></li>
|
|
<li><a href="#index-evaluation_002c-arithmetic-241">evaluation, arithmetic</a>: <a href="#Shell-Arithmetic">Shell Arithmetic</a></li>
|
|
<li><a href="#index-event-designators-379">event designators</a>: <a href="#Event-Designators">Event Designators</a></li>
|
|
<li><a href="#index-execution-environment-101">execution environment</a>: <a href="#Command-Execution-Environment">Command Execution Environment</a></li>
|
|
<li><a href="#index-exit-status-103">exit status</a>: <a href="#Exit-Status">Exit Status</a></li>
|
|
<li><a href="#index-exit-status-4">exit status</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-expansion-79">expansion</a>: <a href="#Shell-Expansions">Shell Expansions</a></li>
|
|
<li><a href="#index-expansion_002c-arithmetic-87">expansion, arithmetic</a>: <a href="#Arithmetic-Expansion">Arithmetic Expansion</a></li>
|
|
<li><a href="#index-expansion_002c-brace-81">expansion, brace</a>: <a href="#Brace-Expansion">Brace Expansion</a></li>
|
|
<li><a href="#index-expansion_002c-filename-91">expansion, filename</a>: <a href="#Filename-Expansion">Filename Expansion</a></li>
|
|
<li><a href="#index-expansion_002c-parameter-85">expansion, parameter</a>: <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></li>
|
|
<li><a href="#index-expansion_002c-pathname-92">expansion, pathname</a>: <a href="#Filename-Expansion">Filename Expansion</a></li>
|
|
<li><a href="#index-expansion_002c-tilde-83">expansion, tilde</a>: <a href="#Tilde-Expansion">Tilde Expansion</a></li>
|
|
<li><a href="#index-expressions_002c-arithmetic-240">expressions, arithmetic</a>: <a href="#Shell-Arithmetic">Shell Arithmetic</a></li>
|
|
<li><a href="#index-expressions_002c-conditional-237">expressions, conditional</a>: <a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a></li>
|
|
<li><a href="#index-FDL_002c-GNU-Free-Documentation-License-385">FDL, GNU Free Documentation License</a>: <a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a></li>
|
|
<li><a href="#index-field-5">field</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-filename-6">filename</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-filename-expansion-93">filename expansion</a>: <a href="#Filename-Expansion">Filename Expansion</a></li>
|
|
<li><a href="#index-foreground-253">foreground</a>: <a href="#Job-Control-Basics">Job Control Basics</a></li>
|
|
<li><a href="#index-functions_002c-shell-63">functions, shell</a>: <a href="#Shell-Functions">Shell Functions</a></li>
|
|
<li><a href="#index-history-builtins-375">history builtins</a>: <a href="#Bash-History-Builtins">Bash History Builtins</a></li>
|
|
<li><a href="#index-history-events-380">history events</a>: <a href="#Event-Designators">Event Designators</a></li>
|
|
<li><a href="#index-history-expansion-378">history expansion</a>: <a href="#History-Interaction">History Interaction</a></li>
|
|
<li><a href="#index-history-list-374">history list</a>: <a href="#Bash-History-Facilities">Bash History Facilities</a></li>
|
|
<li><a href="#index-History_002c-how-to-use-372">History, how to use</a>: <a href="#Programmable-Completion-Builtins">Programmable Completion Builtins</a></li>
|
|
<li><a href="#index-identifier-11">identifier</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-initialization-file_002c-readline-272">initialization file, readline</a>: <a href="#Readline-Init-File">Readline Init File</a></li>
|
|
<li><a href="#index-installation-381">installation</a>: <a href="#Basic-Installation">Basic Installation</a></li>
|
|
<li><a href="#index-interaction_002c-readline-265">interaction, readline</a>: <a href="#Readline-Interaction">Readline Interaction</a></li>
|
|
<li><a href="#index-interactive-shell-235">interactive shell</a>: <a href="#Interactive-Shells">Interactive Shells</a></li>
|
|
<li><a href="#index-interactive-shell-233">interactive shell</a>: <a href="#Invoking-Bash">Invoking Bash</a></li>
|
|
<li><a href="#index-internationalization-25">internationalization</a>: <a href="#Locale-Translation">Locale Translation</a></li>
|
|
<li><a href="#index-job-7">job</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-job-control-8">job control</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-job-control-252">job control</a>: <a href="#Job-Control-Basics">Job Control Basics</a></li>
|
|
<li><a href="#index-kill-ring-271">kill ring</a>: <a href="#Readline-Killing-Commands">Readline Killing Commands</a></li>
|
|
<li><a href="#index-killing-text-269">killing text</a>: <a href="#Readline-Killing-Commands">Readline Killing Commands</a></li>
|
|
<li><a href="#index-localization-24">localization</a>: <a href="#Locale-Translation">Locale Translation</a></li>
|
|
<li><a href="#index-login-shell-232">login shell</a>: <a href="#Invoking-Bash">Invoking Bash</a></li>
|
|
<li><a href="#index-matching_002c-pattern-96">matching, pattern</a>: <a href="#Pattern-Matching">Pattern Matching</a></li>
|
|
<li><a href="#index-metacharacter-9">metacharacter</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-name-10">name</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-native-languages-26">native languages</a>: <a href="#Locale-Translation">Locale Translation</a></li>
|
|
<li><a href="#index-notation_002c-readline-266">notation, readline</a>: <a href="#Readline-Bare-Essentials">Readline Bare Essentials</a></li>
|
|
<li><a href="#index-operator_002c-shell-12">operator, shell</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-parameter-expansion-84">parameter expansion</a>: <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a></li>
|
|
<li><a href="#index-parameters-65">parameters</a>: <a href="#Shell-Parameters">Shell Parameters</a></li>
|
|
<li><a href="#index-parameters_002c-positional-68">parameters, positional</a>: <a href="#Positional-Parameters">Positional Parameters</a></li>
|
|
<li><a href="#index-parameters_002c-special-69">parameters, special</a>: <a href="#Special-Parameters">Special Parameters</a></li>
|
|
<li><a href="#index-pathname-expansion-94">pathname expansion</a>: <a href="#Filename-Expansion">Filename Expansion</a></li>
|
|
<li><a href="#index-pattern-matching-95">pattern matching</a>: <a href="#Pattern-Matching">Pattern Matching</a></li>
|
|
<li><a href="#index-pipeline-34">pipeline</a>: <a href="#Pipelines">Pipelines</a></li>
|
|
<li><a href="#index-POSIX-1">POSIX</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-POSIX-Mode-251">POSIX Mode</a>: <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></li>
|
|
<li><a href="#index-process-group-13">process group</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-process-group-ID-14">process group ID</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-process-substitution-89">process substitution</a>: <a href="#Process-Substitution">Process Substitution</a></li>
|
|
<li><a href="#index-programmable-completion-368">programmable completion</a>: <a href="#Programmable-Completion">Programmable Completion</a></li>
|
|
<li><a href="#index-prompting-249">prompting</a>: <a href="#Printing-a-Prompt">Printing a Prompt</a></li>
|
|
<li><a href="#index-quoting-22">quoting</a>: <a href="#Quoting">Quoting</a></li>
|
|
<li><a href="#index-quoting_002c-ANSI-23">quoting, ANSI</a>: <a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a></li>
|
|
<li><a href="#index-Readline_002c-how-to-use-264">Readline, how to use</a>: <a href="#Job-Control-Variables">Job Control Variables</a></li>
|
|
<li><a href="#index-redirection-97">redirection</a>: <a href="#Redirections">Redirections</a></li>
|
|
<li><a href="#index-reserved-word-15">reserved word</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-restricted-shell-250">restricted shell</a>: <a href="#The-Restricted-Shell">The Restricted Shell</a></li>
|
|
<li><a href="#index-return-status-16">return status</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-shell-arithmetic-239">shell arithmetic</a>: <a href="#Shell-Arithmetic">Shell Arithmetic</a></li>
|
|
<li><a href="#index-shell-function-62">shell function</a>: <a href="#Shell-Functions">Shell Functions</a></li>
|
|
<li><a href="#index-shell-script-105">shell script</a>: <a href="#Shell-Scripts">Shell Scripts</a></li>
|
|
<li><a href="#index-shell-variable-67">shell variable</a>: <a href="#Shell-Parameters">Shell Parameters</a></li>
|
|
<li><a href="#index-shell_002c-interactive-236">shell, interactive</a>: <a href="#Interactive-Shells">Interactive Shells</a></li>
|
|
<li><a href="#index-signal-17">signal</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-signal-handling-104">signal handling</a>: <a href="#Signals">Signals</a></li>
|
|
<li><a href="#index-special-builtin-18">special builtin</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-special-builtin-148">special builtin</a>: <a href="#Special-Builtins">Special Builtins</a></li>
|
|
<li><a href="#index-startup-files-234">startup files</a>: <a href="#Bash-Startup-Files">Bash Startup Files</a></li>
|
|
<li><a href="#index-suspending-jobs-255">suspending jobs</a>: <a href="#Job-Control-Basics">Job Control Basics</a></li>
|
|
<li><a href="#index-tilde-expansion-82">tilde expansion</a>: <a href="#Tilde-Expansion">Tilde Expansion</a></li>
|
|
<li><a href="#index-token-19">token</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-translation_002c-native-languages-27">translation, native languages</a>: <a href="#Locale-Translation">Locale Translation</a></li>
|
|
<li><a href="#index-variable_002c-shell-66">variable, shell</a>: <a href="#Shell-Parameters">Shell Parameters</a></li>
|
|
<li><a href="#index-variables_002c-readline-273">variables, readline</a>: <a href="#Readline-Init-File-Syntax">Readline Init File Syntax</a></li>
|
|
<li><a href="#index-word-20">word</a>: <a href="#Definitions">Definitions</a></li>
|
|
<li><a href="#index-word-splitting-90">word splitting</a>: <a href="#Word-Splitting">Word Splitting</a></li>
|
|
<li><a href="#index-yanking-text-270">yanking text</a>: <a href="#Readline-Killing-Commands">Readline Killing Commands</a></li>
|
|
</ul></body></html>
|
|
|