change `read -d' on a tty when the delimiter is not a newline to set the terminal EOL character instead of putting the terminal into character-at-a-time mode; change some calls to atoi to use strol instead

This commit is contained in:
Chet Ramey
2026-01-30 16:43:46 -05:00
parent b805bbec80
commit 468e98e574
34 changed files with 504 additions and 2161 deletions
+57 -19
View File
@@ -1,5 +1,5 @@
<!-- Creator : groff version 1.23.0 -->
<!-- CreationDate: Wed Dec 31 13:23:39 2025 -->
<!-- CreationDate: Thu Jan 29 13:25:46 2026 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
@@ -133,7 +133,7 @@ Bourne-Again SHell</p>
<p style="margin-left:9%; margin-top: 1em">Bash is
Copyright (C) 1989-2025 by the Free Software Foundation,
Copyright (C) 1989-2026 by the Free Software Foundation,
Inc.</p>
<h2>DESCRIPTION
@@ -881,11 +881,17 @@ a semicolon to delimit commands.</p>
<p style="margin-left:9%; margin-top: 1em">If a command is
terminated by the control operator <b>&amp;</b>, the shell
executes the command in the <i>background</i> in a subshell.
The shell does not wait for the command to finish, and the
return status is 0. These are referred to as
<i>asynchronous</i> commands. Commands separated or
terminated by <b>;</b> (or an equivalent
executes the command asynchronously in a subshell. This is
known as executing a command in the <i>background</i>, and
these are referred to as <i>asynchronous</i> commands. The
shell does not wait for the command to finish, and the
return status is 0. When job control is not active, the
standard input for asynchronous commands, in the absence of
any explicit redirections involving the standard input, is
redirected from <i>/dev/null</i>.</p>
<p style="margin-left:9%; margin-top: 1em">Commands
separated or terminated by <b>;</b> (or an equivalent
<b>&lt;newline&gt;</b>) are executed sequentially; the shell
waits for each command to terminate in turn.</p>
@@ -4607,12 +4613,13 @@ removed.</p>
<p style="margin-left:9%; margin-top: 1em">The character
<i>c</i> following the open brace must be a space, tab,
newline, or <b>|</b>, and the close brace must be in a
position where a reserved word may appear (i.e., preceded by
a command terminator such as semicolon). <b>Bash</b> allows
the close brace to be joined to the remaining characters in
the word without being followed by a shell metacharacter as
a reserved word would usually require.</p>
newline, &ldquo;|&rdquo;, or &ldquo;;&rdquo;; and the close
brace must be in a position where a reserved word may appear
(i.e., preceded by a command terminator such as semicolon).
<b>Bash</b> allows the close brace to be joined to the
remaining characters in the word without being followed by a
shell metacharacter as a reserved word would usually
require.</p>
<p style="margin-left:9%; margin-top: 1em">Any side effects
of <i>command</i> take effect immediately in the current
@@ -4629,7 +4636,15 @@ execution environment, including the positional parameters,
is shared with the caller.</p>
<p style="margin-left:9%; margin-top: 1em">If the first
character following the open brace is a <b>|</b>, the
character following the open brace is a &ldquo;;&rdquo;, the
construct behaves like the form above but preserves any
trailing newlines in the output of <i>command</i> instead of
removing them. This form is useful when the trailing
newlines are significant and should not be stripped from the
command&rsquo;s output.</p>
<p style="margin-left:9%; margin-top: 1em">If the first
character following the open brace is a &ldquo;|&rdquo;, the
construct expands to the value of the <b>REPLY</b> shell
variable after <i>command</i> executes, without removing any
trailing newlines, and the standard output of <i>command</i>
@@ -6593,9 +6608,10 @@ in posix mode.</p>
<p style="margin-left:9%; margin-top: 1em">If a command is
followed by a <b>&amp;</b> and job control is not active,
the default standard input for the command is the empty file
<i>/dev/null</i>. Otherwise, the invoked command inherits
the file descriptors of the calling shell as modified by
redirections.</p>
<i>/dev/null</i>, unless the command has an explicit
redirection involving the standard input. Otherwise, the
invoked command inherits the file descriptors of the calling
shell as modified by redirections.</p>
<h2>ENVIRONMENT
<a name="ENVIRONMENT"></a>
@@ -8872,8 +8888,9 @@ facilities to extract the last word, as if the
(M&minus;C&minus;e)</b></p>
<p style="margin-left:18%;">Expand the line by performing
shell word expansions. This performs alias and history
expansion, <b>$</b>'<i>string</i>' and
shell word expansions, treating the line as a single shell
word. This performs alias and history expansion,
<b>$</b>'<i>string</i>' and
<b>$</b>&quot;<i>string</i>&quot; quoting, tilde expansion,
parameter and variable expansion, arithmetic expansion,
command and process substitution, word splitting, and quote
@@ -8882,6 +8899,27 @@ substitution. See <b><small>HISTORY EXPANSION</small></b>
below for a description of history expansion.</p>
<p style="margin-left:9%;"><b>shell&minus;expand&minus;and&minus;requote&minus;line
()</b></p>
<p style="margin-left:18%;">Expand the line by performing
shell word expansions, splitting the line into shell words
in the same way as for programmable completion. This
performs alias and history expansion,
<b>$</b>'<i>string</i>' and
<b>$</b>&quot;<i>string</i>&quot; quoting, tilde expansion,
parameter and variable expansion, arithmetic expansion,
command and process substitution, word splitting, and quote
removal on each word, then quotes the resulting words if
necessary to prevent further expansion. An explicit argument
suppresses command and process substitution and quotes each
resultant word. As usual, double-quoting a word will
suppress word splitting. This can be useful when combined
with suppressing command substitution, for instance, so the
words in the command substitution aren&rsquo;t quoted
individually.</p>
<p style="margin-left:9%;"><b>history&minus;expand&minus;line
(M&minus;^)</b></p>