better parser error messages; add -p option to source builtin

This commit is contained in:
Chet Ramey
2024-06-21 10:38:39 -04:00
parent dbb48b9786
commit 886e4e68be
17 changed files with 2057 additions and 1912 deletions
+20
View File
@@ -9626,3 +9626,23 @@ parse.y
- cond_term: if we read a WORD where we expect something else, dispose
of the WORD_DESC before returning COND_ERROR
Report and patch from Grisha Levit <grishalevit@gmail.com>
6/10
----
parse.y
- cond_term: if we read a WORD when expecting a close paren, dispose
of the WORD_DESC before returning COND_ERROR
- error_token_from_token: use the TOK argument instead of
current_token if we can't find the token as a reserved word or
symbol
6/12
----
builtins/source.def
- source_builtin: add -p PATH option, searches PATH argument instead
of $PATH; overrides sourcepath; does not search $PWD if path search
fails
doc/bash.1,doc/bashref.texi
- source: document -p
+1
View File
@@ -1047,6 +1047,7 @@ tests/source4.sub f
tests/source5.sub f
tests/source6.sub f
tests/source7.sub f
tests/source8.sub f
tests/case.tests f
tests/case.right f
tests/case1.sub f
+43 -34
View File
@@ -1,7 +1,7 @@
This file is source.def, from which is created source.c.
It implements the builtins "." and "source" in Bash.
Copyright (C) 1987-2023 Free Software Foundation, Inc.
Copyright (C) 1987-2024 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@@ -22,13 +22,14 @@ $PRODUCES source.c
$BUILTIN source
$FUNCTION source_builtin
$SHORT_DOC source filename [arguments]
$SHORT_DOC source [-p path] filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Read and execute commands from FILENAME in the current shell. If the
-p option is supplied, the PATH argument is treated as a colon-
separated list of directories to search for FILENAME. If -p is not
supplied, $PATH is searched to find FILENAME. If any ARGUMENTS are
supplied, they become the positional parameters when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
@@ -38,13 +39,14 @@ $END
$BUILTIN .
$DOCNAME dot
$FUNCTION source_builtin
$SHORT_DOC . filename [arguments]
$SHORT_DOC . [-p path] filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Read and execute commands from FILENAME in the current shell. If the
-p option is supplied, the PATH argument is treated as a colon-
separated list of directories to search for FILENAME. If -p is not
supplied, $PATH is searched to find FILENAME. If any ARGUMENTS are
supplied, they become the positional parameters when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
@@ -82,7 +84,8 @@ extern int errno;
static void uw_maybe_pop_dollar_vars (void *);
/* If non-zero, `.' uses $PATH to look up the script to be sourced. */
/* If non-zero, `.' uses $PATH to look up the script to be sourced when -p is
not supplied. */
int source_uses_path = 1;
/* If non-zero, `.' looks in the current directory if the filename argument
@@ -115,11 +118,24 @@ uw_maybe_pop_dollar_vars (void *ignore)
int
source_builtin (WORD_LIST *list)
{
int result, search_cwd;
char *filename, *debug_trap, *x;
int result, search_cwd, opt;
char *filename, *debug_trap, *x, *pathstring;
if (no_options (list))
return (EX_USAGE);
pathstring = 0;
reset_internal_getopt ();
while ((opt = internal_getopt (list, "p:")) != -1)
{
switch (opt)
{
case 'p':
pathstring = list_optarg;
break;
CASE_HELPOPT;
default:
builtin_usage ();
return (EX_USAGE);
}
}
list = loptend;
if (list == 0)
@@ -130,14 +146,19 @@ source_builtin (WORD_LIST *list)
}
#if defined (RESTRICTED_SHELL)
if (restricted && strchr (list->word->word, '/'))
if (restricted && (pathstring || strchr (list->word->word, '/')))
{
sh_restricted (list->word->word);
return (EXECUTION_FAILURE);
}
#endif
search_cwd = source_searches_cwd;
/* normalize pathstring */
if (pathstring && *pathstring == 0)
pathstring = ".";
/* XXX - If we supply -p PATH, don't default to searching $PWD */
search_cwd = pathstring == 0 && source_searches_cwd;
filename = (char *)NULL;
/* XXX -- should this be absolute_pathname? */
@@ -145,23 +166,11 @@ source_builtin (WORD_LIST *list)
filename = savestring (list->word->word);
else if (absolute_pathname (list->word->word))
filename = savestring (list->word->word);
else if (pathstring)
filename = find_in_path (list->word->word, pathstring, FS_READABLE);
else if (source_uses_path)
{
#if 0
char *spath;
#if defined (RESTRICTED_SHELL)
if (restricted == 0 && posixly_correct == 0 && (spath = path_value ("BASH_SOURCE_PATH", 1)))
#else
if (posixly_correct == 0 && (spath = path_value ("BASH_SOURCE_PATH", 1)))
#endif
{
filename = find_in_path (list->word->word, spath, FS_READABLE);
search_cwd = 0;
}
else
#endif
filename = find_path_file (list->word->word);
}
filename = find_path_file (list->word->word);
if (filename == 0)
{
if (search_cwd == 0)
+605 -596
View File
File diff suppressed because it is too large Load Diff
+22 -25
View File
@@ -5,14 +5,14 @@
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
.\" Last Change: Sat May 11 12:44:30 EDT 2024
.\" Last Change: Wed Jun 12 10:31:44 PDT 2024
.\"
.\" bash_builtins, strip all but Built-Ins section
.\" avoid a warning about an undefined register
.\" .if !rzY .nr zY 0
.if \n(zZ=1 .ig zZ
.if \n(zY=1 .ig zY
.TH BASH 1 "2024 May 11" "GNU Bash 5.3"
.TH BASH 1 "2024 June 12" "GNU Bash 5.3"
.\"
.ie \n(.g \{\
.ds ' \(aq
@@ -8054,44 +8054,40 @@ and performing any specified
redirections.
The return status is zero.
.TP
\fB\&.\| \fP \fIfilename\fP [\fIarguments\fP]
\fB\&.\| \fP [\fB\-p\fP \fIpath\fP] \fIfilename\fP [\fIarguments\fP]
.PD 0
.TP
\fBsource\fP \fIfilename\fP [\fIarguments\fP]
\fBsource\fP [\fB\-p\fP \fIpath\fP] \fIfilename\fP [\fIarguments\fP]
.PD
Read and execute commands from
The \fB\&.\| \fP command (\fBsource\fP) reads and execute commands from
.I filename
in the current
shell environment and return the exit status of the last command
executed from
in the current shell environment and returns the exit status of the
last command executed from
.IR filename .
If
.I filename
does not contain a slash, filenames in
If \fIfilename\fP does not contain a slash, \fB\&.\| \fP searchs for it.
If the \fB\-p\fP option is supplied, \fB\&.\| \fP treats \fIpath\fP
as a colon-separated list of directories in which to find \fIfilename\fP;
otherwise, \fB\&.\| \fP uses the entries in
.SM
.B PATH
are used to find the directory containing
.IR filename ,
but \fIfilename\fP does not need to be executable.
The file searched for in
.SM
.B PATH
need not be executable.
to find the directory containing
.IR filename .
\fIfilename\fP does not need to be executable.
When \fBbash\fP is not in \fIposix mode\fP, it searches
the current directory if no file is found in
.SM
.BR PATH .
.BR PATH ,
but does not search the current directory if \fB\-p\fP is supplied.
If the
.B sourcepath
option to the
.B shopt
builtin command is turned off, the
builtin command is turned off, \fB\&.\| \fP does not search
.SM
.B PATH
is not searched.
.BR PATH .
If any \fIarguments\fP are supplied, they become the positional
parameters when \fIfilename\fP is executed. Otherwise the positional
parameters are unchanged.
parameters when \fIfilename\fP is executed.
Otherwise the positional parameters are unchanged.
If the \fB\-T\fP option is enabled, \fB.\fP inherits any trap on
\fBDEBUG\fP; if it is not, any \fBDEBUG\fP trap string is saved and
restored around the call to \fB.\fP, and \fB.\fP unsets the
@@ -11202,7 +11198,8 @@ If set, the
\fB.\fP (\fBsource\fP) builtin uses the value of
.SM
.B PATH
to find the directory containing the file supplied as an argument.
to find the directory containing the file supplied as an argument when
the \fB\-p\fP option is not supplied.
This option is enabled by default.
.TP 8
.B varredir_close
+222 -213
View File
@@ -1,9 +1,9 @@
This is bash.info, produced by makeinfo version 7.1 from bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 23 April 2024).
Bash shell (version 5.3, 12 June 2024).
This is Edition 5.3, last updated 23 April 2024, of The GNU Bash
This is Edition 5.3, last updated 12 June 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Copyright © 1988-2023 Free Software Foundation, Inc.
@@ -26,10 +26,10 @@ Bash Features
*************
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 23 April 2024). The Bash home page is
Bash shell (version 5.3, 12 June 2024). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 23 April 2024, of The GNU Bash
This is Edition 5.3, last updated 12 June 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -991,9 +991,8 @@ File: bash.info, Node: Conditional Constructs, Next: Command Grouping, Prev:
and filename expansion. The shell performs tilde expansion,
parameter and variable expansion, arithmetic expansion, command
substitution, process substitution, and quote removal on those
words (the expansions that would occur if the words were enclosed
in double quotes). Conditional operators such as -f must be
unquoted to be recognized as primaries.
words. Conditional operators such as -f must be unquoted to be
recognized as primaries.
When used with [[, the < and > operators sort
lexicographically using the current locale.
@@ -3280,24 +3279,28 @@ standard.
The return status is zero.
. (a period)
. FILENAME [ARGUMENTS]
. [-p PATH] FILENAME [ARGUMENTS]
Read and execute commands from the FILENAME argument in the current
shell context. If FILENAME does not contain a slash, the PATH
variable is used to find FILENAME, but FILENAME does not need to be
executable. When Bash is not in POSIX mode, it searches the
current directory if FILENAME is not found in $PATH. If any
ARGUMENTS are supplied, they become the positional parameters when
FILENAME is executed. Otherwise the positional parameters are
unchanged. If the -T option is enabled, . inherits any trap on
DEBUG; if it is not, any DEBUG trap string is saved and
restored around the call to ., and . unsets the DEBUG trap
while it executes. If -T is not set, and the sourced file
changes the DEBUG trap, the new value is retained when .
completes. The return status is the exit status of the last
command executed, or zero if no commands are executed. If FILENAME
is not found, or cannot be read, the return status is non-zero.
This builtin is equivalent to source.
shell context. If FILENAME does not contain a slash, . searches
for it. If -p is supplied, . treats PATH as a colon-separated
list of directories in which to find FILENAME; otherwise, . uses
the directories in PATH to find FILENAME. FILENAME does not need
to be executable. When Bash is not in POSIX mode, it searches the
current directory if FILENAME is not found in $PATH, but does not
search the current directory if -p is supplied. If the
sourcepath option (*note The Shopt Builtin::) is turned off .
does not search PATH. If any ARGUMENTS are supplied, they become
the positional parameters when FILENAME is executed. Otherwise the
positional parameters are unchanged. If the -T option is
enabled, . inherits any trap on DEBUG; if it is not, any
DEBUG trap string is saved and restored around the call to .,
and . unsets the DEBUG trap while it executes. If -T is not
set, and the sourced file changes the DEBUG trap, the new value
is retained when . completes. The return status is the exit
status of the last command executed, or zero if no commands are
executed. If FILENAME is not found, or cannot be read, the return
status is non-zero. This builtin is equivalent to source.
break
break [N]
@@ -4396,7 +4399,7 @@ standard.
A synonym for mapfile.
source
source FILENAME
source [-p PATH] FILENAME [ARGUMENTS]
A synonym for . (*note Bourne Shell Builtins::).
@@ -5223,8 +5226,9 @@ This builtin allows you to change additional shell optional behavior.
sourcepath
If set, the . (source) builtin uses the value of PATH to
find the directory containing the file supplied as an
argument. This option is enabled by default.
find the directory containing the file supplied as an argument
when the -p option is not supplied. This option is enabled
by default.
varredir_close
If set, the shell automatically closes file descriptors
@@ -5729,7 +5733,7 @@ Variables::).
A sort specifier of nosort disables sorting completely; the
results are returned in the order they are read from the file
system,.
system, and any leading - is ignored.
If the sort specifier is missing, it defaults to NAME, so a value
of + is equivalent to the null string, and a value of - sorts
@@ -9096,10 +9100,12 @@ File: bash.info, Node: Commands For Moving, Next: Commands For History, Up: B
-------------------------
beginning-of-line (C-a)
Move to the start of the current line.
Move to the start of the current line. This may also be bound to
the Home key on some keyboards.
end-of-line (C-e)
Move to the end of the line.
Move to the end of the line. This may also be bound to the End key
on some keyboards.
forward-char (C-f)
Move forward a character.
@@ -9200,26 +9206,28 @@ File: bash.info, Node: Commands For History, Next: Commands For Text, Prev: C
a string supplied by the user. The search string may match
anywhere in a history line.
history-search-forward ()
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. By default, this command is unbound.
history-search-backward ()
Search backward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. By default, this command is unbound.
non-incremental search. By default, this command is unbound, but
may be bound to the Page Down key on some keyboards.
history-substring-search-forward ()
history-search-forward ()
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. By default, this command is unbound, but
may be bound to the Page Up key on some keyboards.
history-substring-search-backward ()
Search backward through the history for the string of characters
between the start of the current line and the point. The search
string may match anywhere in a history line. This is a
non-incremental search. By default, this command is unbound.
history-substring-search-backward ()
Search backward through the history for the string of characters
history-substring-search-forward ()
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string may match anywhere in a history line. This is a
non-incremental search. By default, this command is unbound.
@@ -9346,7 +9354,8 @@ File: bash.info, Node: Commands For Text, Next: Commands For Killing, Prev: C
Characters bound to backward-delete-char replace the character
before point with a space.
By default, this command is unbound.
By default, this command is unbound, but may be bound to the Insert
key on some keyboards.

File: bash.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
@@ -12213,17 +12222,17 @@ D.1 Index of Shell Builtin Commands
* .: Bourne Shell Builtins.
(line 17)
* [: Bourne Shell Builtins.
(line 285)
(line 289)
* alias: Bash Builtins. (line 11)
* bg: Job Control Builtins.
(line 7)
* bind: Bash Builtins. (line 21)
* break: Bourne Shell Builtins.
(line 37)
(line 41)
* builtin: Bash Builtins. (line 124)
* caller: Bash Builtins. (line 133)
* cd: Bourne Shell Builtins.
(line 45)
(line 49)
* command: Bash Builtins. (line 150)
* compgen: Programmable Completion Builtins.
(line 12)
@@ -12232,7 +12241,7 @@ D.1 Index of Shell Builtin Commands
* compopt: Programmable Completion Builtins.
(line 248)
* continue: Bourne Shell Builtins.
(line 90)
(line 94)
* declare: Bash Builtins. (line 170)
* dirs: Directory Stack Builtins.
(line 7)
@@ -12241,23 +12250,23 @@ D.1 Index of Shell Builtin Commands
* echo: Bash Builtins. (line 273)
* enable: Bash Builtins. (line 322)
* eval: Bourne Shell Builtins.
(line 99)
(line 103)
* exec: Bourne Shell Builtins.
(line 107)
(line 111)
* exit: Bourne Shell Builtins.
(line 125)
(line 129)
* export: Bourne Shell Builtins.
(line 132)
(line 136)
* false: Bourne Shell Builtins.
(line 148)
(line 152)
* fc: Bash History Builtins.
(line 10)
* fg: Job Control Builtins.
(line 17)
* getopts: Bourne Shell Builtins.
(line 153)
(line 157)
* hash: Bourne Shell Builtins.
(line 197)
(line 201)
* help: Bash Builtins. (line 360)
* history: Bash History Builtins.
(line 46)
@@ -12275,36 +12284,36 @@ D.1 Index of Shell Builtin Commands
* pushd: Directory Stack Builtins.
(line 69)
* pwd: Bourne Shell Builtins.
(line 222)
(line 226)
* read: Bash Builtins. (line 523)
* readarray: Bash Builtins. (line 629)
* readonly: Bourne Shell Builtins.
(line 232)
(line 236)
* return: Bourne Shell Builtins.
(line 251)
(line 255)
* set: The Set Builtin. (line 11)
* shift: Bourne Shell Builtins.
(line 272)
(line 276)
* shopt: The Shopt Builtin. (line 9)
* source: Bash Builtins. (line 638)
* suspend: Job Control Builtins.
(line 116)
* test: Bourne Shell Builtins.
(line 285)
(line 289)
* times: Bourne Shell Builtins.
(line 387)
(line 391)
* trap: Bourne Shell Builtins.
(line 393)
(line 397)
* true: Bourne Shell Builtins.
(line 455)
(line 459)
* type: Bash Builtins. (line 643)
* typeset: Bash Builtins. (line 681)
* ulimit: Bash Builtins. (line 687)
* umask: Bourne Shell Builtins.
(line 460)
(line 464)
* unalias: Bash Builtins. (line 793)
* unset: Bourne Shell Builtins.
(line 478)
(line 482)
* wait: Job Control Builtins.
(line 76)
@@ -12611,13 +12620,13 @@ D.4 Function Index
(line 6)
* alias-expand-line (): Miscellaneous Commands.
(line 133)
* backward-char (C-b): Commands For Moving. (line 15)
* backward-char (C-b): Commands For Moving. (line 17)
* backward-delete-char (Rubout): Commands For Text. (line 17)
* backward-kill-line (C-x Rubout): Commands For Killing.
(line 11)
* backward-kill-word (M-<DEL>): Commands For Killing.
(line 28)
* backward-word (M-b): Commands For Moving. (line 22)
* backward-word (M-b): Commands For Moving. (line 24)
* beginning-of-history (M-<): Commands For History.
(line 20)
* beginning-of-line (C-a): Commands For Moving. (line 6)
@@ -12628,8 +12637,8 @@ D.4 Function Index
(line 42)
* character-search-backward (M-C-]): Miscellaneous Commands.
(line 47)
* clear-display (M-C-l): Commands For Moving. (line 48)
* clear-screen (C-l): Commands For Moving. (line 53)
* clear-display (M-C-l): Commands For Moving. (line 50)
* clear-screen (C-l): Commands For Moving. (line 55)
* complete (<TAB>): Commands For Completion.
(line 6)
* complete-command (M-!): Commands For Completion.
@@ -12677,18 +12686,18 @@ D.4 Function Index
* end-of-file (usually C-d): Commands For Text. (line 6)
* end-of-history (M->): Commands For History.
(line 23)
* end-of-line (C-e): Commands For Moving. (line 9)
* end-of-line (C-e): Commands For Moving. (line 10)
* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
(line 37)
* execute-named-command (M-x): Miscellaneous Commands.
(line 147)
* fetch-history (): Commands For History.
(line 103)
(line 105)
* forward-backward-delete-char (): Commands For Text. (line 21)
* forward-char (C-f): Commands For Moving. (line 12)
* forward-char (C-f): Commands For Moving. (line 14)
* forward-search-history (C-s): Commands For History.
(line 33)
* forward-word (M-f): Commands For Moving. (line 18)
* forward-word (M-f): Commands For Moving. (line 20)
* glob-complete-word (M-g): Miscellaneous Commands.
(line 98)
* glob-expand-word (C-x *): Miscellaneous Commands.
@@ -12700,13 +12709,13 @@ D.4 Function Index
* history-expand-line (M-^): Miscellaneous Commands.
(line 126)
* history-search-backward (): Commands For History.
(line 57)
* history-search-forward (): Commands For History.
(line 51)
* history-search-forward (): Commands For History.
(line 58)
* history-substring-search-backward (): Commands For History.
(line 69)
(line 65)
* history-substring-search-forward (): Commands For History.
(line 63)
(line 71)
* insert-comment (M-#): Miscellaneous Commands.
(line 61)
* insert-completions (M-*): Commands For Completion.
@@ -12729,13 +12738,13 @@ D.4 Function Index
(line 38)
* next-history (C-n): Commands For History.
(line 17)
* next-screen-line (): Commands For Moving. (line 41)
* next-screen-line (): Commands For Moving. (line 43)
* non-incremental-forward-search-history (M-n): Commands For History.
(line 45)
* non-incremental-reverse-search-history (M-p): Commands For History.
(line 39)
* operate-and-get-next (C-o): Commands For History.
(line 96)
(line 98)
* overwrite-mode (): Commands For Text. (line 77)
* possible-command-completions (C-x !): Commands For Completion.
(line 86)
@@ -12753,12 +12762,12 @@ D.4 Function Index
(line 19)
* previous-history (C-p): Commands For History.
(line 13)
* previous-screen-line (): Commands For Moving. (line 34)
* previous-screen-line (): Commands For Moving. (line 36)
* print-last-kbd-macro (): Keyboard Macros. (line 17)
* quoted-insert (C-q or C-v): Commands For Text. (line 26)
* re-read-init-file (C-x C-r): Miscellaneous Commands.
(line 6)
* redraw-current-line (): Commands For Moving. (line 57)
* redraw-current-line (): Commands For Moving. (line 59)
* reverse-search-history (C-r): Commands For History.
(line 27)
* revert-line (M-r): Miscellaneous Commands.
@@ -12768,10 +12777,10 @@ D.4 Function Index
(line 33)
* shell-backward-kill-word (): Commands For Killing.
(line 37)
* shell-backward-word (M-C-b): Commands For Moving. (line 30)
* shell-backward-word (M-C-b): Commands For Moving. (line 32)
* shell-expand-line (M-C-e): Miscellaneous Commands.
(line 119)
* shell-forward-word (M-C-f): Commands For Moving. (line 26)
* shell-forward-word (M-C-f): Commands For Moving. (line 28)
* shell-kill-word (M-C-d): Commands For Killing.
(line 32)
* shell-transpose-words (M-C-t): Commands For Text. (line 58)
@@ -12797,9 +12806,9 @@ D.4 Function Index
* yank (C-y): Commands For Killing.
(line 72)
* yank-last-arg (M-. or M-_): Commands For History.
(line 84)
(line 86)
* yank-nth-arg (M-C-y): Commands For History.
(line 75)
(line 77)
* yank-pop (M-y): Commands For Killing.
(line 75)
@@ -12980,138 +12989,138 @@ D.5 Concept Index

Tag Table:
Node: Top895
Node: Introduction2830
Node: What is Bash?3043
Node: What is a shell?4184
Node: Definitions6763
Node: Basic Shell Features9939
Node: Shell Syntax11159
Node: Shell Operation12186
Node: Quoting13484
Node: Escape Character14797
Node: Single Quotes15295
Node: Double Quotes15644
Node: ANSI-C Quoting16987
Node: Locale Translation18372
Node: Creating Internationalized Scripts19716
Node: Comments23914
Node: Shell Commands24549
Node: Reserved Words25488
Node: Simple Commands26353
Node: Pipelines27012
Node: Lists30075
Node: Compound Commands31947
Node: Looping Constructs32956
Node: Conditional Constructs35500
Node: Command Grouping50404
Node: Coprocesses51891
Node: GNU Parallel54587
Node: Shell Functions55505
Node: Shell Parameters63611
Node: Positional Parameters68144
Node: Special Parameters69079
Node: Shell Expansions72385
Node: Brace Expansion74574
Node: Tilde Expansion77237
Node: Shell Parameter Expansion80003
Node: Command Substitution99110
Node: Arithmetic Expansion102643
Node: Process Substitution103608
Node: Word Splitting104745
Node: Filename Expansion106886
Node: Pattern Matching109982
Node: Quote Removal115215
Node: Redirections115519
Node: Executing Commands125328
Node: Simple Command Expansion125995
Node: Command Search and Execution128106
Node: Command Execution Environment130514
Node: Environment133823
Node: Exit Status135527
Node: Signals137312
Node: Shell Scripts140926
Node: Shell Builtin Commands144018
Node: Bourne Shell Builtins146129
Node: Bash Builtins170533
Node: Modifying Shell Behavior205492
Node: The Set Builtin205834
Node: The Shopt Builtin217349
Node: Special Builtins234085
Node: Shell Variables235074
Node: Bourne Shell Variables235508
Node: Bash Variables237701
Node: Bash Features274283
Node: Invoking Bash275297
Node: Bash Startup Files281696
Node: Interactive Shells287008
Node: What is an Interactive Shell?287416
Node: Is this Shell Interactive?288082
Node: Interactive Shell Behavior288906
Node: Bash Conditional Expressions292660
Node: Shell Arithmetic297834
Node: Aliases300916
Node: Arrays303871
Node: The Directory Stack310670
Node: Directory Stack Builtins311467
Node: Controlling the Prompt315916
Node: The Restricted Shell319054
Node: Bash POSIX Mode321841
Node: Shell Compatibility Mode339352
Node: Job Control348371
Node: Job Control Basics348828
Node: Job Control Builtins354002
Node: Job Control Variables359962
Node: Command Line Editing361139
Node: Introduction and Notation362843
Node: Readline Interaction364487
Node: Readline Bare Essentials365675
Node: Readline Movement Commands367493
Node: Readline Killing Commands368490
Node: Readline Arguments370468
Node: Searching371525
Node: Readline Init File373754
Node: Readline Init File Syntax375036
Node: Conditional Init Constructs399974
Node: Sample Init File404339
Node: Bindable Readline Commands407460
Node: Commands For Moving408685
Node: Commands For History410785
Node: Commands For Text415868
Node: Commands For Killing419943
Node: Numeric Arguments422744
Node: Commands For Completion423896
Node: Keyboard Macros428212
Node: Miscellaneous Commands428913
Node: Readline vi Mode435567
Node: Programmable Completion436519
Node: Programmable Completion Builtins444476
Node: A Programmable Completion Example456042
Node: Using History Interactively461387
Node: Bash History Facilities462068
Node: Bash History Builtins465180
Node: History Interaction470423
Node: Event Designators474748
Node: Word Designators476331
Node: Modifiers478317
Node: Installing Bash480226
Node: Basic Installation481360
Node: Compilers and Options485239
Node: Compiling For Multiple Architectures485989
Node: Installation Names487738
Node: Specifying the System Type489972
Node: Sharing Defaults490718
Node: Operation Controls491432
Node: Optional Features492451
Node: Reporting Bugs504253
Node: Major Differences From The Bourne Shell505602
Node: GNU Free Documentation License525337
Node: Indexes550514
Node: Builtin Index550965
Node: Reserved Word Index558063
Node: Variable Index560508
Node: Function Index577639
Node: Concept Index591495
Node: Top893
Node: Introduction2826
Node: What is Bash?3039
Node: What is a shell?4180
Node: Definitions6759
Node: Basic Shell Features9935
Node: Shell Syntax11155
Node: Shell Operation12182
Node: Quoting13480
Node: Escape Character14793
Node: Single Quotes15291
Node: Double Quotes15640
Node: ANSI-C Quoting16983
Node: Locale Translation18368
Node: Creating Internationalized Scripts19712
Node: Comments23910
Node: Shell Commands24545
Node: Reserved Words25484
Node: Simple Commands26349
Node: Pipelines27008
Node: Lists30071
Node: Compound Commands31943
Node: Looping Constructs32952
Node: Conditional Constructs35496
Node: Command Grouping50317
Node: Coprocesses51804
Node: GNU Parallel54500
Node: Shell Functions55418
Node: Shell Parameters63524
Node: Positional Parameters68057
Node: Special Parameters68992
Node: Shell Expansions72298
Node: Brace Expansion74487
Node: Tilde Expansion77150
Node: Shell Parameter Expansion79916
Node: Command Substitution99023
Node: Arithmetic Expansion102556
Node: Process Substitution103521
Node: Word Splitting104658
Node: Filename Expansion106799
Node: Pattern Matching109895
Node: Quote Removal115128
Node: Redirections115432
Node: Executing Commands125241
Node: Simple Command Expansion125908
Node: Command Search and Execution128019
Node: Command Execution Environment130427
Node: Environment133736
Node: Exit Status135440
Node: Signals137225
Node: Shell Scripts140839
Node: Shell Builtin Commands143931
Node: Bourne Shell Builtins146042
Node: Bash Builtins170812
Node: Modifying Shell Behavior205793
Node: The Set Builtin206135
Node: The Shopt Builtin217650
Node: Special Builtins234437
Node: Shell Variables235426
Node: Bourne Shell Variables235860
Node: Bash Variables238053
Node: Bash Features274670
Node: Invoking Bash275684
Node: Bash Startup Files282083
Node: Interactive Shells287395
Node: What is an Interactive Shell?287803
Node: Is this Shell Interactive?288469
Node: Interactive Shell Behavior289293
Node: Bash Conditional Expressions293047
Node: Shell Arithmetic298221
Node: Aliases301303
Node: Arrays304258
Node: The Directory Stack311057
Node: Directory Stack Builtins311854
Node: Controlling the Prompt316303
Node: The Restricted Shell319441
Node: Bash POSIX Mode322228
Node: Shell Compatibility Mode339739
Node: Job Control348758
Node: Job Control Basics349215
Node: Job Control Builtins354389
Node: Job Control Variables360349
Node: Command Line Editing361526
Node: Introduction and Notation363230
Node: Readline Interaction364874
Node: Readline Bare Essentials366062
Node: Readline Movement Commands367880
Node: Readline Killing Commands368877
Node: Readline Arguments370855
Node: Searching371912
Node: Readline Init File374141
Node: Readline Init File Syntax375423
Node: Conditional Init Constructs400361
Node: Sample Init File404726
Node: Bindable Readline Commands407847
Node: Commands For Moving409072
Node: Commands For History411299
Node: Commands For Text416504
Node: Commands For Killing420638
Node: Numeric Arguments423439
Node: Commands For Completion424591
Node: Keyboard Macros428907
Node: Miscellaneous Commands429608
Node: Readline vi Mode436262
Node: Programmable Completion437214
Node: Programmable Completion Builtins445171
Node: A Programmable Completion Example456737
Node: Using History Interactively462082
Node: Bash History Facilities462763
Node: Bash History Builtins465875
Node: History Interaction471118
Node: Event Designators475443
Node: Word Designators477026
Node: Modifiers479012
Node: Installing Bash480921
Node: Basic Installation482055
Node: Compilers and Options485934
Node: Compiling For Multiple Architectures486684
Node: Installation Names488433
Node: Specifying the System Type490667
Node: Sharing Defaults491413
Node: Operation Controls492127
Node: Optional Features493146
Node: Reporting Bugs504948
Node: Major Differences From The Bourne Shell506297
Node: GNU Free Documentation License526032
Node: Indexes551209
Node: Builtin Index551660
Node: Reserved Word Index558758
Node: Variable Index561203
Node: Function Index578334
Node: Concept Index592190

End Tag Table
BIN
View File
Binary file not shown.
+222 -213
View File
@@ -2,9 +2,9 @@ This is bashref.info, produced by makeinfo version 7.1 from
bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 23 April 2024).
Bash shell (version 5.3, 12 June 2024).
This is Edition 5.3, last updated 23 April 2024, of The GNU Bash
This is Edition 5.3, last updated 12 June 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Copyright © 1988-2023 Free Software Foundation, Inc.
@@ -27,10 +27,10 @@ Bash Features
*************
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 23 April 2024). The Bash home page is
Bash shell (version 5.3, 12 June 2024). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 23 April 2024, of The GNU Bash
This is Edition 5.3, last updated 12 June 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -992,9 +992,8 @@ File: bashref.info, Node: Conditional Constructs, Next: Command Grouping, Pre
and filename expansion. The shell performs tilde expansion,
parameter and variable expansion, arithmetic expansion, command
substitution, process substitution, and quote removal on those
words (the expansions that would occur if the words were enclosed
in double quotes). Conditional operators such as -f must be
unquoted to be recognized as primaries.
words. Conditional operators such as -f must be unquoted to be
recognized as primaries.
When used with [[, the < and > operators sort
lexicographically using the current locale.
@@ -3281,24 +3280,28 @@ standard.
The return status is zero.
. (a period)
. FILENAME [ARGUMENTS]
. [-p PATH] FILENAME [ARGUMENTS]
Read and execute commands from the FILENAME argument in the current
shell context. If FILENAME does not contain a slash, the PATH
variable is used to find FILENAME, but FILENAME does not need to be
executable. When Bash is not in POSIX mode, it searches the
current directory if FILENAME is not found in $PATH. If any
ARGUMENTS are supplied, they become the positional parameters when
FILENAME is executed. Otherwise the positional parameters are
unchanged. If the -T option is enabled, . inherits any trap on
DEBUG; if it is not, any DEBUG trap string is saved and
restored around the call to ., and . unsets the DEBUG trap
while it executes. If -T is not set, and the sourced file
changes the DEBUG trap, the new value is retained when .
completes. The return status is the exit status of the last
command executed, or zero if no commands are executed. If FILENAME
is not found, or cannot be read, the return status is non-zero.
This builtin is equivalent to source.
shell context. If FILENAME does not contain a slash, . searches
for it. If -p is supplied, . treats PATH as a colon-separated
list of directories in which to find FILENAME; otherwise, . uses
the directories in PATH to find FILENAME. FILENAME does not need
to be executable. When Bash is not in POSIX mode, it searches the
current directory if FILENAME is not found in $PATH, but does not
search the current directory if -p is supplied. If the
sourcepath option (*note The Shopt Builtin::) is turned off .
does not search PATH. If any ARGUMENTS are supplied, they become
the positional parameters when FILENAME is executed. Otherwise the
positional parameters are unchanged. If the -T option is
enabled, . inherits any trap on DEBUG; if it is not, any
DEBUG trap string is saved and restored around the call to .,
and . unsets the DEBUG trap while it executes. If -T is not
set, and the sourced file changes the DEBUG trap, the new value
is retained when . completes. The return status is the exit
status of the last command executed, or zero if no commands are
executed. If FILENAME is not found, or cannot be read, the return
status is non-zero. This builtin is equivalent to source.
break
break [N]
@@ -4397,7 +4400,7 @@ standard.
A synonym for mapfile.
source
source FILENAME
source [-p PATH] FILENAME [ARGUMENTS]
A synonym for . (*note Bourne Shell Builtins::).
@@ -5224,8 +5227,9 @@ This builtin allows you to change additional shell optional behavior.
sourcepath
If set, the . (source) builtin uses the value of PATH to
find the directory containing the file supplied as an
argument. This option is enabled by default.
find the directory containing the file supplied as an argument
when the -p option is not supplied. This option is enabled
by default.
varredir_close
If set, the shell automatically closes file descriptors
@@ -5730,7 +5734,7 @@ Variables::).
A sort specifier of nosort disables sorting completely; the
results are returned in the order they are read from the file
system,.
system, and any leading - is ignored.
If the sort specifier is missing, it defaults to NAME, so a value
of + is equivalent to the null string, and a value of - sorts
@@ -9097,10 +9101,12 @@ File: bashref.info, Node: Commands For Moving, Next: Commands For History, Up
-------------------------
beginning-of-line (C-a)
Move to the start of the current line.
Move to the start of the current line. This may also be bound to
the Home key on some keyboards.
end-of-line (C-e)
Move to the end of the line.
Move to the end of the line. This may also be bound to the End key
on some keyboards.
forward-char (C-f)
Move forward a character.
@@ -9201,26 +9207,28 @@ File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev
a string supplied by the user. The search string may match
anywhere in a history line.
history-search-forward ()
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. By default, this command is unbound.
history-search-backward ()
Search backward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. By default, this command is unbound.
non-incremental search. By default, this command is unbound, but
may be bound to the Page Down key on some keyboards.
history-substring-search-forward ()
history-search-forward ()
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string must match at the beginning of a history line. This is a
non-incremental search. By default, this command is unbound, but
may be bound to the Page Up key on some keyboards.
history-substring-search-backward ()
Search backward through the history for the string of characters
between the start of the current line and the point. The search
string may match anywhere in a history line. This is a
non-incremental search. By default, this command is unbound.
history-substring-search-backward ()
Search backward through the history for the string of characters
history-substring-search-forward ()
Search forward through the history for the string of characters
between the start of the current line and the point. The search
string may match anywhere in a history line. This is a
non-incremental search. By default, this command is unbound.
@@ -9347,7 +9355,8 @@ File: bashref.info, Node: Commands For Text, Next: Commands For Killing, Prev
Characters bound to backward-delete-char replace the character
before point with a space.
By default, this command is unbound.
By default, this command is unbound, but may be bound to the Insert
key on some keyboards.

File: bashref.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
@@ -12214,17 +12223,17 @@ D.1 Index of Shell Builtin Commands
* .: Bourne Shell Builtins.
(line 17)
* [: Bourne Shell Builtins.
(line 285)
(line 289)
* alias: Bash Builtins. (line 11)
* bg: Job Control Builtins.
(line 7)
* bind: Bash Builtins. (line 21)
* break: Bourne Shell Builtins.
(line 37)
(line 41)
* builtin: Bash Builtins. (line 124)
* caller: Bash Builtins. (line 133)
* cd: Bourne Shell Builtins.
(line 45)
(line 49)
* command: Bash Builtins. (line 150)
* compgen: Programmable Completion Builtins.
(line 12)
@@ -12233,7 +12242,7 @@ D.1 Index of Shell Builtin Commands
* compopt: Programmable Completion Builtins.
(line 248)
* continue: Bourne Shell Builtins.
(line 90)
(line 94)
* declare: Bash Builtins. (line 170)
* dirs: Directory Stack Builtins.
(line 7)
@@ -12242,23 +12251,23 @@ D.1 Index of Shell Builtin Commands
* echo: Bash Builtins. (line 273)
* enable: Bash Builtins. (line 322)
* eval: Bourne Shell Builtins.
(line 99)
(line 103)
* exec: Bourne Shell Builtins.
(line 107)
(line 111)
* exit: Bourne Shell Builtins.
(line 125)
(line 129)
* export: Bourne Shell Builtins.
(line 132)
(line 136)
* false: Bourne Shell Builtins.
(line 148)
(line 152)
* fc: Bash History Builtins.
(line 10)
* fg: Job Control Builtins.
(line 17)
* getopts: Bourne Shell Builtins.
(line 153)
(line 157)
* hash: Bourne Shell Builtins.
(line 197)
(line 201)
* help: Bash Builtins. (line 360)
* history: Bash History Builtins.
(line 46)
@@ -12276,36 +12285,36 @@ D.1 Index of Shell Builtin Commands
* pushd: Directory Stack Builtins.
(line 69)
* pwd: Bourne Shell Builtins.
(line 222)
(line 226)
* read: Bash Builtins. (line 523)
* readarray: Bash Builtins. (line 629)
* readonly: Bourne Shell Builtins.
(line 232)
(line 236)
* return: Bourne Shell Builtins.
(line 251)
(line 255)
* set: The Set Builtin. (line 11)
* shift: Bourne Shell Builtins.
(line 272)
(line 276)
* shopt: The Shopt Builtin. (line 9)
* source: Bash Builtins. (line 638)
* suspend: Job Control Builtins.
(line 116)
* test: Bourne Shell Builtins.
(line 285)
(line 289)
* times: Bourne Shell Builtins.
(line 387)
(line 391)
* trap: Bourne Shell Builtins.
(line 393)
(line 397)
* true: Bourne Shell Builtins.
(line 455)
(line 459)
* type: Bash Builtins. (line 643)
* typeset: Bash Builtins. (line 681)
* ulimit: Bash Builtins. (line 687)
* umask: Bourne Shell Builtins.
(line 460)
(line 464)
* unalias: Bash Builtins. (line 793)
* unset: Bourne Shell Builtins.
(line 478)
(line 482)
* wait: Job Control Builtins.
(line 76)
@@ -12612,13 +12621,13 @@ D.4 Function Index
(line 6)
* alias-expand-line (): Miscellaneous Commands.
(line 133)
* backward-char (C-b): Commands For Moving. (line 15)
* backward-char (C-b): Commands For Moving. (line 17)
* backward-delete-char (Rubout): Commands For Text. (line 17)
* backward-kill-line (C-x Rubout): Commands For Killing.
(line 11)
* backward-kill-word (M-<DEL>): Commands For Killing.
(line 28)
* backward-word (M-b): Commands For Moving. (line 22)
* backward-word (M-b): Commands For Moving. (line 24)
* beginning-of-history (M-<): Commands For History.
(line 20)
* beginning-of-line (C-a): Commands For Moving. (line 6)
@@ -12629,8 +12638,8 @@ D.4 Function Index
(line 42)
* character-search-backward (M-C-]): Miscellaneous Commands.
(line 47)
* clear-display (M-C-l): Commands For Moving. (line 48)
* clear-screen (C-l): Commands For Moving. (line 53)
* clear-display (M-C-l): Commands For Moving. (line 50)
* clear-screen (C-l): Commands For Moving. (line 55)
* complete (<TAB>): Commands For Completion.
(line 6)
* complete-command (M-!): Commands For Completion.
@@ -12678,18 +12687,18 @@ D.4 Function Index
* end-of-file (usually C-d): Commands For Text. (line 6)
* end-of-history (M->): Commands For History.
(line 23)
* end-of-line (C-e): Commands For Moving. (line 9)
* end-of-line (C-e): Commands For Moving. (line 10)
* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
(line 37)
* execute-named-command (M-x): Miscellaneous Commands.
(line 147)
* fetch-history (): Commands For History.
(line 103)
(line 105)
* forward-backward-delete-char (): Commands For Text. (line 21)
* forward-char (C-f): Commands For Moving. (line 12)
* forward-char (C-f): Commands For Moving. (line 14)
* forward-search-history (C-s): Commands For History.
(line 33)
* forward-word (M-f): Commands For Moving. (line 18)
* forward-word (M-f): Commands For Moving. (line 20)
* glob-complete-word (M-g): Miscellaneous Commands.
(line 98)
* glob-expand-word (C-x *): Miscellaneous Commands.
@@ -12701,13 +12710,13 @@ D.4 Function Index
* history-expand-line (M-^): Miscellaneous Commands.
(line 126)
* history-search-backward (): Commands For History.
(line 57)
* history-search-forward (): Commands For History.
(line 51)
* history-search-forward (): Commands For History.
(line 58)
* history-substring-search-backward (): Commands For History.
(line 69)
(line 65)
* history-substring-search-forward (): Commands For History.
(line 63)
(line 71)
* insert-comment (M-#): Miscellaneous Commands.
(line 61)
* insert-completions (M-*): Commands For Completion.
@@ -12730,13 +12739,13 @@ D.4 Function Index
(line 38)
* next-history (C-n): Commands For History.
(line 17)
* next-screen-line (): Commands For Moving. (line 41)
* next-screen-line (): Commands For Moving. (line 43)
* non-incremental-forward-search-history (M-n): Commands For History.
(line 45)
* non-incremental-reverse-search-history (M-p): Commands For History.
(line 39)
* operate-and-get-next (C-o): Commands For History.
(line 96)
(line 98)
* overwrite-mode (): Commands For Text. (line 77)
* possible-command-completions (C-x !): Commands For Completion.
(line 86)
@@ -12754,12 +12763,12 @@ D.4 Function Index
(line 19)
* previous-history (C-p): Commands For History.
(line 13)
* previous-screen-line (): Commands For Moving. (line 34)
* previous-screen-line (): Commands For Moving. (line 36)
* print-last-kbd-macro (): Keyboard Macros. (line 17)
* quoted-insert (C-q or C-v): Commands For Text. (line 26)
* re-read-init-file (C-x C-r): Miscellaneous Commands.
(line 6)
* redraw-current-line (): Commands For Moving. (line 57)
* redraw-current-line (): Commands For Moving. (line 59)
* reverse-search-history (C-r): Commands For History.
(line 27)
* revert-line (M-r): Miscellaneous Commands.
@@ -12769,10 +12778,10 @@ D.4 Function Index
(line 33)
* shell-backward-kill-word (): Commands For Killing.
(line 37)
* shell-backward-word (M-C-b): Commands For Moving. (line 30)
* shell-backward-word (M-C-b): Commands For Moving. (line 32)
* shell-expand-line (M-C-e): Miscellaneous Commands.
(line 119)
* shell-forward-word (M-C-f): Commands For Moving. (line 26)
* shell-forward-word (M-C-f): Commands For Moving. (line 28)
* shell-kill-word (M-C-d): Commands For Killing.
(line 32)
* shell-transpose-words (M-C-t): Commands For Text. (line 58)
@@ -12798,9 +12807,9 @@ D.4 Function Index
* yank (C-y): Commands For Killing.
(line 72)
* yank-last-arg (M-. or M-_): Commands For History.
(line 84)
(line 86)
* yank-nth-arg (M-C-y): Commands For History.
(line 75)
(line 77)
* yank-pop (M-y): Commands For Killing.
(line 75)
@@ -12981,138 +12990,138 @@ D.5 Concept Index

Tag Table:
Node: Top898
Node: Introduction2836
Node: What is Bash?3052
Node: What is a shell?4196
Node: Definitions6778
Node: Basic Shell Features9957
Node: Shell Syntax11180
Node: Shell Operation12210
Node: Quoting13511
Node: Escape Character14827
Node: Single Quotes15328
Node: Double Quotes15680
Node: ANSI-C Quoting17026
Node: Locale Translation18414
Node: Creating Internationalized Scripts19761
Node: Comments23962
Node: Shell Commands24600
Node: Reserved Words25542
Node: Simple Commands26410
Node: Pipelines27072
Node: Lists30138
Node: Compound Commands32013
Node: Looping Constructs33025
Node: Conditional Constructs35572
Node: Command Grouping50479
Node: Coprocesses51969
Node: GNU Parallel54668
Node: Shell Functions55589
Node: Shell Parameters63698
Node: Positional Parameters68234
Node: Special Parameters69172
Node: Shell Expansions72481
Node: Brace Expansion74673
Node: Tilde Expansion77339
Node: Shell Parameter Expansion80108
Node: Command Substitution99218
Node: Arithmetic Expansion102754
Node: Process Substitution103722
Node: Word Splitting104862
Node: Filename Expansion107006
Node: Pattern Matching110105
Node: Quote Removal115341
Node: Redirections115648
Node: Executing Commands125460
Node: Simple Command Expansion126130
Node: Command Search and Execution128244
Node: Command Execution Environment130655
Node: Environment133967
Node: Exit Status135674
Node: Signals137462
Node: Shell Scripts141079
Node: Shell Builtin Commands144174
Node: Bourne Shell Builtins146288
Node: Bash Builtins170695
Node: Modifying Shell Behavior205657
Node: The Set Builtin206002
Node: The Shopt Builtin217520
Node: Special Builtins234259
Node: Shell Variables235251
Node: Bourne Shell Variables235688
Node: Bash Variables237884
Node: Bash Features274469
Node: Invoking Bash275486
Node: Bash Startup Files281888
Node: Interactive Shells287203
Node: What is an Interactive Shell?287614
Node: Is this Shell Interactive?288283
Node: Interactive Shell Behavior289110
Node: Bash Conditional Expressions292867
Node: Shell Arithmetic298044
Node: Aliases301129
Node: Arrays304087
Node: The Directory Stack310889
Node: Directory Stack Builtins311689
Node: Controlling the Prompt316141
Node: The Restricted Shell319282
Node: Bash POSIX Mode322072
Node: Shell Compatibility Mode339586
Node: Job Control348608
Node: Job Control Basics349068
Node: Job Control Builtins354245
Node: Job Control Variables360208
Node: Command Line Editing361388
Node: Introduction and Notation363095
Node: Readline Interaction364742
Node: Readline Bare Essentials365933
Node: Readline Movement Commands367754
Node: Readline Killing Commands368754
Node: Readline Arguments370735
Node: Searching371795
Node: Readline Init File374027
Node: Readline Init File Syntax375312
Node: Conditional Init Constructs400253
Node: Sample Init File404621
Node: Bindable Readline Commands407745
Node: Commands For Moving408973
Node: Commands For History411076
Node: Commands For Text416162
Node: Commands For Killing420240
Node: Numeric Arguments423044
Node: Commands For Completion424199
Node: Keyboard Macros428518
Node: Miscellaneous Commands429222
Node: Readline vi Mode435879
Node: Programmable Completion436834
Node: Programmable Completion Builtins444794
Node: A Programmable Completion Example456363
Node: Using History Interactively461711
Node: Bash History Facilities462395
Node: Bash History Builtins465510
Node: History Interaction470756
Node: Event Designators475084
Node: Word Designators476670
Node: Modifiers478659
Node: Installing Bash480571
Node: Basic Installation481708
Node: Compilers and Options485590
Node: Compiling For Multiple Architectures486343
Node: Installation Names488095
Node: Specifying the System Type490332
Node: Sharing Defaults491081
Node: Operation Controls491798
Node: Optional Features492820
Node: Reporting Bugs504625
Node: Major Differences From The Bourne Shell505977
Node: GNU Free Documentation License525715
Node: Indexes550895
Node: Builtin Index551349
Node: Reserved Word Index558450
Node: Variable Index560898
Node: Function Index578032
Node: Concept Index591891
Node: Top896
Node: Introduction2832
Node: What is Bash?3048
Node: What is a shell?4192
Node: Definitions6774
Node: Basic Shell Features9953
Node: Shell Syntax11176
Node: Shell Operation12206
Node: Quoting13507
Node: Escape Character14823
Node: Single Quotes15324
Node: Double Quotes15676
Node: ANSI-C Quoting17022
Node: Locale Translation18410
Node: Creating Internationalized Scripts19757
Node: Comments23958
Node: Shell Commands24596
Node: Reserved Words25538
Node: Simple Commands26406
Node: Pipelines27068
Node: Lists30134
Node: Compound Commands32009
Node: Looping Constructs33021
Node: Conditional Constructs35568
Node: Command Grouping50392
Node: Coprocesses51882
Node: GNU Parallel54581
Node: Shell Functions55502
Node: Shell Parameters63611
Node: Positional Parameters68147
Node: Special Parameters69085
Node: Shell Expansions72394
Node: Brace Expansion74586
Node: Tilde Expansion77252
Node: Shell Parameter Expansion80021
Node: Command Substitution99131
Node: Arithmetic Expansion102667
Node: Process Substitution103635
Node: Word Splitting104775
Node: Filename Expansion106919
Node: Pattern Matching110018
Node: Quote Removal115254
Node: Redirections115561
Node: Executing Commands125373
Node: Simple Command Expansion126043
Node: Command Search and Execution128157
Node: Command Execution Environment130568
Node: Environment133880
Node: Exit Status135587
Node: Signals137375
Node: Shell Scripts140992
Node: Shell Builtin Commands144087
Node: Bourne Shell Builtins146201
Node: Bash Builtins170974
Node: Modifying Shell Behavior205958
Node: The Set Builtin206303
Node: The Shopt Builtin217821
Node: Special Builtins234611
Node: Shell Variables235603
Node: Bourne Shell Variables236040
Node: Bash Variables238236
Node: Bash Features274856
Node: Invoking Bash275873
Node: Bash Startup Files282275
Node: Interactive Shells287590
Node: What is an Interactive Shell?288001
Node: Is this Shell Interactive?288670
Node: Interactive Shell Behavior289497
Node: Bash Conditional Expressions293254
Node: Shell Arithmetic298431
Node: Aliases301516
Node: Arrays304474
Node: The Directory Stack311276
Node: Directory Stack Builtins312076
Node: Controlling the Prompt316528
Node: The Restricted Shell319669
Node: Bash POSIX Mode322459
Node: Shell Compatibility Mode339973
Node: Job Control348995
Node: Job Control Basics349455
Node: Job Control Builtins354632
Node: Job Control Variables360595
Node: Command Line Editing361775
Node: Introduction and Notation363482
Node: Readline Interaction365129
Node: Readline Bare Essentials366320
Node: Readline Movement Commands368141
Node: Readline Killing Commands369141
Node: Readline Arguments371122
Node: Searching372182
Node: Readline Init File374414
Node: Readline Init File Syntax375699
Node: Conditional Init Constructs400640
Node: Sample Init File405008
Node: Bindable Readline Commands408132
Node: Commands For Moving409360
Node: Commands For History411590
Node: Commands For Text416798
Node: Commands For Killing420935
Node: Numeric Arguments423739
Node: Commands For Completion424894
Node: Keyboard Macros429213
Node: Miscellaneous Commands429917
Node: Readline vi Mode436574
Node: Programmable Completion437529
Node: Programmable Completion Builtins445489
Node: A Programmable Completion Example457058
Node: Using History Interactively462406
Node: Bash History Facilities463090
Node: Bash History Builtins466205
Node: History Interaction471451
Node: Event Designators475779
Node: Word Designators477365
Node: Modifiers479354
Node: Installing Bash481266
Node: Basic Installation482403
Node: Compilers and Options486285
Node: Compiling For Multiple Architectures487038
Node: Installation Names488790
Node: Specifying the System Type491027
Node: Sharing Defaults491776
Node: Operation Controls492493
Node: Optional Features493515
Node: Reporting Bugs505320
Node: Major Differences From The Bourne Shell506672
Node: GNU Free Documentation License526410
Node: Indexes551590
Node: Builtin Index552044
Node: Reserved Word Index559145
Node: Variable Index561593
Node: Function Index578727
Node: Concept Index592586

End Tag Table
+16 -9
View File
@@ -3858,18 +3858,24 @@ The return status is zero.
@item . @r{(a period)}
@btindex .
@example
. @var{filename} [@var{arguments}]
. [-p @var{path}] @var{filename} [@var{arguments}]
@end example
Read and execute commands from the @var{filename} argument in the
current shell context. If @var{filename} does not contain a slash,
the @env{PATH} variable is used to find @var{filename},
but @var{filename} does not need to be executable.
current shell context.
If @var{filename} does not contain a slash, @code{.} searches for it.
If @option{-p} is supplied, @code{.} treats @var{path}
as a colon-separated list of directories in which to find @var{filename};
otherwise, @code{.} uses the directories in @env{PATH} to find @var{filename}.
@var{filename} does not need to be executable.
When Bash is not in @sc{posix} mode, it searches the current directory
if @var{filename} is not found in @env{$PATH}.
if @var{filename} is not found in @env{$PATH},
but does not search the current directory if @option{-p} is supplied.
If the @code{sourcepath} option (@pxref{The Shopt Builtin}) is turned off
@code{.} does not search @env{PATH}.
If any @var{arguments} are supplied, they become the positional
parameters when @var{filename} is executed. Otherwise the positional
parameters are unchanged.
parameters when @var{filename} is executed.
Otherwise the positional parameters are unchanged.
If the @option{-T} option is enabled, @code{.} inherits any trap on
@code{DEBUG}; if it is not, any @code{DEBUG} trap string is saved and
restored around the call to @code{.}, and @code{.} unsets the
@@ -5231,7 +5237,7 @@ A synonym for @code{mapfile}.
@item source
@btindex source
@example
source @var{filename}
source [-p @var{path}] @var{filename} [@var{arguments}]
@end example
A synonym for @code{.} (@pxref{Bourne Shell Builtins}).
@@ -6120,7 +6126,8 @@ number of positional parameters.
@item sourcepath
If set, the @code{.} (@code{source}) builtin uses the value of @env{PATH}
to find the directory containing the file supplied as an argument.
to find the directory containing the file supplied as an argument
when the @option{-p} option is not supplied.
This option is enabled by default.
@item varredir_close
+808 -804
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -2,10 +2,10 @@
Copyright (C) 1988-2024 Free Software Foundation, Inc.
@end ignore
@set LASTCHANGE Tue Apr 23 15:08:20 EDT 2024
@set LASTCHANGE Wed Jun 12 10:34:52 PDT 2024
@set EDITION 5.3
@set VERSION 5.3
@set UPDATED 23 April 2024
@set UPDATED-MONTH April 2024
@set UPDATED 12 June 2024
@set UPDATED-MONTH June 2024
+3 -1
View File
@@ -5041,6 +5041,8 @@ cond_term (void)
}
else
parser_error (lineno, _("expected `)'"));
if (cond_token == WORD)
dispose_word (yylval.word);
COND_RETURN_ERROR ();
}
term = make_cond_node (COND_EXPR, (WORD_DESC *)NULL, term, (COND_COM *)NULL);
@@ -6642,7 +6644,7 @@ error_token_from_token (int tok)
t = (char *)NULL;
/* This stuff is dicy and needs closer inspection */
switch (current_token)
switch (tok)
{
case WORD:
case ASSIGNMENT_WORD:
+20 -7
View File
@@ -139,6 +139,19 @@ abc
def
ghi
ok
./source8.sub: line 36: improbable-filename: No such file or directory
./source8.sub: line 37: improbable-filename: No such file or directory
an improbable filename
an improbable filename
an improbable filename
an improbable filename
file in the current directory
./source8.sub: line 51: .: cwd-filename: file not found
file in the current directory
bash: line 1: .: cwd-filename: file not found
bash: line 1: .: cwd-filename: file not found
file in the current directory
file in the current directory
AVAR
foo
foo
@@ -149,11 +162,11 @@ AVAR
foo
declare -x foo=""
declare -x FOO="\$\$"
./builtins.tests: line 239: declare: FOO: not found
./builtins.tests: line 242: declare: FOO: not found
declare -x FOO="\$\$"
ok
ok
./builtins.tests: line 271: kill: 4096: invalid signal specification
./builtins.tests: line 274: kill: 4096: invalid signal specification
1
a\n\n\nb
a
@@ -332,7 +345,7 @@ A star (*) next to a name means that the command is disabled.
! PIPELINE history [-c] [-d offset] [n] or hist>
job_spec [&] if COMMANDS; then COMMANDS; [ elif C>
(( expression )) jobs [-lnprs] [jobspec ...] or jobs >
. filename [arguments] kill [-s sigspec | -n signum | -sigs>
. [-p path] filename [arguments] kill [-s sigspec | -n signum | -sigs>
: let arg [arg ...]
[ arg... ] local [option] name[=value] ...
[[ expression ]] logout [n]
@@ -349,7 +362,7 @@ A star (*) next to a name means that the command is disabled.
complete [-abcdefgjksuv] [-pr] [-DEI]> set [-abefhkmnptuvxBCEHPT] [-o optio>
compopt [-o|+o option] [-DEI] [name .> shift [n]
continue [n] shopt [-pqsu] [-o] [optname ...]
coproc [NAME] command [redirections] source filename [arguments]
coproc [NAME] command [redirections] source [-p path] filename [argument>
declare [-aAfFgiIlnrtux] [name[=value> suspend [-f]
dirs [-clpv] [+N] [-N] test [expr]
disown [-h] [-ar] [jobspec ... | pid > time [-p] pipeline
@@ -425,7 +438,7 @@ A star (*) next to a name means that the command is disabled.
! PIPELINE history [-c] [-d offset] [n] or hist>
job_spec [&] if COMMANDS; then COMMANDS; [ elif C>
(( expression )) jobs [-lnprs] [jobspec ...] or jobs >
. filename [arguments] kill [-s sigspec | -n signum | -sigs>
. [-p path] filename [arguments] kill [-s sigspec | -n signum | -sigs>
: let arg [arg ...]
[ arg... ] local [option] name[=value] ...
[[ expression ]] logout [n]
@@ -442,7 +455,7 @@ A star (*) next to a name means that the command is disabled.
complete [-abcdefgjksuv] [-pr] [-DEI]> set [-abefhkmnptuvxBCEHPT] [-o optio>
compopt [-o|+o option] [-DEI] [name .> shift [n]
continue [n] shopt [-pqsu] [-o] [optname ...]
coproc [NAME] command [redirections] source filename [arguments]
coproc [NAME] command [redirections] source [-p path] filename [argument>
declare [-aAfFgiIlnrtux] [name[=value> suspend [-f]
dirs [-clpv] [+N] [-N] test [expr]
disown [-h] [-ar] [jobspec ... | pid > time [-p] pipeline
@@ -489,5 +502,5 @@ popd: usage: popd [-n] [+N | -N]
./builtins12.sub: line 36: popd: +8: directory stack index out of range
/tmp /
/
./builtins.tests: line 322: exit: status: numeric argument required
./builtins.tests: line 325: exit: status: numeric argument required
after non-numeric arg to exit: 2
+3
View File
@@ -208,6 +208,9 @@ ${THIS_SH} ./source6.sub
# test bugs with source called from multiline aliases and other contexts
${THIS_SH} ./source7.sub
# test source/. -p path
${THIS_SH} ./source8.sub
# in posix mode, assignment statements preceding special builtins are
# reflected in the shell environment. `.' and `eval' need special-case
# code.
+2 -2
View File
@@ -157,7 +157,7 @@ bash: -c: line 1: unexpected token `EOF', expected `)'
bash: -c: line 2: syntax error: unexpected end of file
bash: -c: line 1: unexpected EOF while looking for `]]'
bash: -c: line 2: syntax error: unexpected end of file
bash: -c: line 1: syntax error in conditional expression
bash: -c: line 1: syntax error in conditional expression: unexpected token `]'
bash: -c: line 1: syntax error near `]'
bash: -c: line 1: `[[ ( -t X ) ]'
bash: -c: line 1: unexpected argument `&' to conditional unary operator
@@ -178,7 +178,7 @@ bash: -c: line 1: `[[ 4 > & ]]'
bash: -c: line 1: unexpected token `&' in conditional command
bash: -c: line 1: syntax error near `&'
bash: -c: line 1: `[[ & ]]'
bash: -c: line 1: conditional binary operator expected
bash: -c: line 1: unexpected token `7', conditional binary operator expected
bash: -c: line 1: syntax error near `7'
bash: -c: line 1: `[[ -Q 7 ]]'
bash: -c: line 1: unexpected argument `<' to conditional unary operator
+5 -5
View File
@@ -81,11 +81,11 @@ bash: line 1: PWD: readonly variable
bash: line 1: OLDPWD: readonly variable
1
./errors.tests: line 236: .: filename argument required
.: usage: . filename [arguments]
.: usage: . [-p path] filename [arguments]
./errors.tests: line 237: source: filename argument required
source: usage: source filename [arguments]
source: usage: source [-p path] filename [arguments]
./errors.tests: line 240: .: -i: invalid option
.: usage: . filename [arguments]
.: usage: . [-p path] filename [arguments]
./errors.tests: line 243: set: -q: invalid option
set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
./errors.tests: line 246: enable: sh: not a shell builtin
@@ -141,7 +141,7 @@ set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
./errors.tests: line 348: xx: readonly variable
1
./errors1.sub: line 14: .: -i: invalid option
.: usage: . filename [arguments]
.: usage: . [-p path] filename [arguments]
./errors1.sub: line 22: shift: -4: shift count out of range
./errors1.sub: line 23: shift: -4: shift count out of range
./errors1.sub: line 27: break: -1: loop count out of range
@@ -255,7 +255,7 @@ ok 6
./errors8.sub: line 16: /notthere: No such file or directory
ok 7
./errors8.sub: line 17: .: -x: invalid option
.: usage: . filename [arguments]
.: usage: . [-p path] filename [arguments]
ok 8
DEBUG
./errors9.sub: line 6: [[: ++: arithmetic syntax error: operand expected (error token is "+")
+62
View File
@@ -0,0 +1,62 @@
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# test various uses of source -p
: ${THIS_SH:=./bash}
PATH=/bin:/usr/bin:/sbin:/usr/sbin
: ${TMPDIR:=/var/tmp}
export SDIR=${TMPDIR}/source-$$
mkdir -p $SDIR || { echo "$SDIR: cannot create" >&2; exit 1; }
FN=${SDIR}/improbable-filename
cat >$FN << EOF
echo an improbable filename
EOF
cat >cwd-filename <<EOF
echo file in the current directory
EOF
trap 'rm -rf ${SDIR} ; rm -f cwd-filename' 0
# not found in $PATH
. improbable-filename
source improbable-filename
# searches path supplied with -p
. -p $SDIR:. improbable-filename
source -p $SDIR:. improbable-filename
# -p works even without sourcepath
shopt -u sourcepath
. -p $SDIR:. improbable-filename
source -p $SDIR:. improbable-filename
shopt -s sourcepath
# does not search the current directory with -p
. cwd-filename
. -p $SDIR cwd-filename
# but does if . is in the path argument
source -p $SDIR:. cwd-filename
# but does not in posix mode, where special builtins failing exits the shell
${THIS_SH} -c 'set -o posix ; . cwd-filename' bash
${THIS_SH} -c 'set -o posix ; . -p $SDIR cwd-filename' bash
# a null PATH argument is the same as "."
. -p '' cwd-filename
source -p '' cwd-filename