fix typo in readline custom LS_COLORS extension; fix so `time' is recognized as a reserved word after $( and ${; don't run traps while parsing a command substitution

This commit is contained in:
Chet Ramey
2023-09-07 17:09:24 -04:00
parent f4683835d8
commit aab2c1fb1d
17 changed files with 2751 additions and 2650 deletions
+30
View File
@@ -7533,3 +7533,33 @@ execute_cmd.c
execute_case_command: fix up order in which BASH_COMMAND is set,
the DEBUG trap is run, and PS4 is printed.
From a report by Grisha Levit <grishalevit@gmail.com>
lib/readline/colors.c
- RL_COLOR_PREFIX_EXTENSION: make sure the custom suffix has a leading
`.'
Report and fix from Stefan Klinger <readline-gnu.org@stefan-klinger.de>
lib/readline/parse-colors.c
- free_color_ext_list: new function, called on parse error, frees the
list of extensions
- rl_reparse_colors: new public function, frees old extension list and
reparses (presumably new) value of LS_COLORS; some minimal checking
to make sure the value has really changed
9/1
---
parse.y
- time_command_acceptable: make sure `time' is recognized as a
reserved word after DOLPAREN and DOLBRACE.
Report from Dima Korobskiy <dkroot2@gmail.com>
builtins/printf.def
- printf_builtin: make 'C' equivalent to 'lc'; 'S' equivalent to 'ls'
as POSIX specifies
9/6
---
eval.c
- parse_command: don't run pending traps if we're parsing a command
substitution
From a report from Emanuele Torre <torreemanuele6@gmail.com>
+8
View File
@@ -889,6 +889,14 @@ assign_compound_array_list (SHELL_VAR *var, WORD_LIST *nlist, int flags)
assoc_dispose (h);
}
#if ARRAY_EXPORT
if (var && exported_p (var))
{
INVALIDATE_EXPORTSTR (var);
array_needs_making = 1;
}
#endif
return (any_failed ? 0 : 1);
}
+39 -29
View File
@@ -380,7 +380,7 @@ printf_builtin (WORD_LIST *list)
if (*fmt != '%')
{
PC (*fmt);
PC (*fmt); /* should print entire multibyte char here */
continue;
}
@@ -465,11 +465,12 @@ printf_builtin (WORD_LIST *list)
switch(convch)
{
case 'c':
case 'C':
{
char p;
#if defined (HANDLE_MULTIBYTE)
if (longform)
if (longform || convch == 'C')
{
wchar_t wc, ws[2];
int r;
@@ -490,10 +491,11 @@ printf_builtin (WORD_LIST *list)
}
case 's':
case 'S':
{
char *p;
#if defined (HANDLE_MULTIBYTE)
if (longform)
if (longform || convch == 'S')
{
wchar_t *wp;
size_t slen;
@@ -507,8 +509,38 @@ printf_builtin (WORD_LIST *list)
break;
}
#endif
#if 0 /*TAG:bash-5.4*/
if (altform == 0)
#endif
{
p = getstr ();
PF(start, p);
break;
}
}
/*FALLTHROUGH*/
case 'b': /* expand escapes in argument */
{
char *p, *xp;
int rlen, r;
p = getstr ();
PF(start, p);
ch = rlen = r = 0;
xp = bexpand (p, strlen (p), &ch, &rlen);
if (xp)
{
/* Have to use printstr because of possible NUL bytes
in XP -- printf does not handle that well. */
r = printstr (start, xp, rlen, fieldwidth, precision);
if (r < 0)
retval = EXECUTION_FAILURE;
free (xp);
}
if (ch || r < 0)
PRETURN (retval);
break;
}
@@ -600,30 +632,6 @@ printf_builtin (WORD_LIST *list)
break;
}
case 'b': /* expand escapes in argument */
{
char *p, *xp;
int rlen, r;
p = getstr ();
ch = rlen = r = 0;
xp = bexpand (p, strlen (p), &ch, &rlen);
if (xp)
{
/* Have to use printstr because of possible NUL bytes
in XP -- printf does not handle that well. */
r = printstr (start, xp, rlen, fieldwidth, precision);
if (r < 0)
retval = EXECUTION_FAILURE;
free (xp);
}
if (ch || r < 0)
PRETURN (retval);
break;
}
case 'q': /* print with shell quoting */
case 'Q':
{
@@ -1162,7 +1170,7 @@ bexpand (char *string, int len, int *sawc, int *lenp)
#else
ret = (char *)xmalloc (len + 1);
#endif
temp = 0;
for (r = ret, s = string; s && *s; )
{
c = *s++;
@@ -1171,6 +1179,8 @@ bexpand (char *string, int len, int *sawc, int *lenp)
*r++ = c;
continue;
}
/* output entire multibyte character here? */
temp = 0;
#if defined (HANDLE_MULTIBYTE)
memset (mbch, '\0', sizeof (mbch));
+2330 -2325
View File
File diff suppressed because it is too large Load Diff
+5 -2
View File
@@ -5,14 +5,14 @@
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
.\" Last Change: Tue Aug 15 16:02:58 EDT 2023
.\" Last Change: Thu Aug 31 15:47:46 EDT 2023
.\"
.\" 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 "2023 August 15" "GNU Bash 5.3"
.TH BASH 1 "2023 August 31" "GNU Bash 5.3"
.\"
.\" There's some problem with having a `@'
.\" in a tagged paragraph with the BSD man macros.
@@ -9696,6 +9696,9 @@ as a shell variable name.
The %s and %c format specifiers accept an l (long) modifier, which forces
them to convert the argument string to a wide-character string and apply
any supplied field width and precision in terms of characters, not bytes.
.\" .PP
.\" The %s format specifier understands the "altform" flag (#) and behaves
.\" identically to the %b format specifier if it's supplied.
.PP
Arguments to non-string format specifiers are treated as C constants,
except that a leading plus or minus sign is allowed, and if the leading
+112 -107
View File
@@ -1,9 +1,9 @@
This is bash.info, produced by makeinfo version 6.8 from bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 15 August 2023).
Bash shell (version 5.3, 31 August 2023).
This is Edition 5.3, last updated 15 August 2023, of 'The GNU Bash
This is Edition 5.3, last updated 31 August 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.3.
Copyright (C) 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, 15 August 2023). The Bash home page is
Bash shell (version 5.3, 31 August 2023). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 15 August 2023, of 'The GNU Bash
This is Edition 5.3, last updated 31 August 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -4227,6 +4227,7 @@ standard.
'%Q'
like '%q', but applies any supplied precision to the ARGUMENT
before quoting it.
'%(DATEFMT)T'
Causes 'printf' to output the date-time string resulting from
using DATEFMT as a format string for 'strftime'(3). The
@@ -6629,7 +6630,10 @@ link itself.
'-v VARNAME'
True if the shell variable VARNAME is set (has been assigned a
value).
value). If VARNAME is an indexed array variable name subscripted
by '@' or '*', this returns true if the array has any set elements.
If VARNAME is an associative array variable name subscripted by '@'
or '*', this returns true if an element with that key is set.
'-R VARNAME'
True if the shell variable VARNAME is set and is a name reference.
@@ -6895,23 +6899,24 @@ above.
Any element of an array may be referenced using '${NAME[SUBSCRIPT]}'.
The braces are required to avoid conflicts with the shell's filename
expansion operators. If the SUBSCRIPT is '@' or '*', the word expands
to all members of the array NAME. These subscripts differ only when the
word appears within double quotes. If the word is double-quoted,
'${NAME[*]}' expands to a single word with the value of each array
member separated by the first character of the 'IFS' variable, and
'${NAME[@]}' expands each element of NAME to a separate word. When
there are no array members, '${NAME[@]}' expands to nothing. If the
double-quoted expansion occurs within a word, the expansion of the first
parameter is joined with the beginning part of the original word, and
the expansion of the last parameter is joined with the last part of the
original word. This is analogous to the expansion of the special
parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the length of
'${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the expansion is the
number of elements in the array. If the SUBSCRIPT used to reference an
element of an indexed array evaluates to a number less than zero, it is
interpreted as relative to one greater than the maximum index of the
array, so negative indices count back from the end of the array, and an
index of -1 refers to the last element.
to all members of the array NAME, unless otherwise noted in the
description of a builtin or word expansion. These subscripts differ
only when the word appears within double quotes. If the word is
double-quoted, '${NAME[*]}' expands to a single word with the value of
each array member separated by the first character of the 'IFS'
variable, and '${NAME[@]}' expands each element of NAME to a separate
word. When there are no array members, '${NAME[@]}' expands to nothing.
If the double-quoted expansion occurs within a word, the expansion of
the first parameter is joined with the beginning part of the original
word, and the expansion of the last parameter is joined with the last
part of the original word. This is analogous to the expansion of the
special parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the
length of '${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the
expansion is the number of elements in the array. If the SUBSCRIPT used
to reference an element of an indexed array evaluates to a number less
than zero, it is interpreted as relative to one greater than the maximum
index of the array, so negative indices count back from the end of the
array, and an index of -1 refers to the last element.
Referencing an array variable without a subscript is equivalent to
referencing with a subscript of 0. Any reference to a variable using a
@@ -12162,8 +12167,8 @@ D.1 Index of Shell Builtin Commands
(line 69)
* pwd: Bourne Shell Builtins.
(line 218)
* read: Bash Builtins. (line 513)
* readarray: Bash Builtins. (line 616)
* read: Bash Builtins. (line 514)
* readarray: Bash Builtins. (line 617)
* readonly: Bourne Shell Builtins.
(line 228)
* return: Bourne Shell Builtins.
@@ -12172,7 +12177,7 @@ D.1 Index of Shell Builtin Commands
* shift: Bourne Shell Builtins.
(line 268)
* shopt: The Shopt Builtin. (line 9)
* source: Bash Builtins. (line 625)
* source: Bash Builtins. (line 626)
* suspend: Job Control Builtins.
(line 116)
* test: Bourne Shell Builtins.
@@ -12183,12 +12188,12 @@ D.1 Index of Shell Builtin Commands
(line 389)
* true: Bourne Shell Builtins.
(line 451)
* type: Bash Builtins. (line 630)
* typeset: Bash Builtins. (line 668)
* ulimit: Bash Builtins. (line 674)
* type: Bash Builtins. (line 631)
* typeset: Bash Builtins. (line 669)
* ulimit: Bash Builtins. (line 675)
* umask: Bourne Shell Builtins.
(line 456)
* unalias: Bash Builtins. (line 780)
* unalias: Bash Builtins. (line 781)
* unset: Bourne Shell Builtins.
(line 474)
* wait: Job Control Builtins.
@@ -12918,84 +12923,84 @@ Node: Shell Scripts137014
Node: Shell Builtin Commands140038
Node: Bourne Shell Builtins142073
Node: Bash Builtins165206
Node: Modifying Shell Behavior198141
Node: The Set Builtin198483
Node: The Shopt Builtin209454
Node: Special Builtins225589
Node: Shell Variables226565
Node: Bourne Shell Variables226999
Node: Bash Variables229100
Node: Bash Features264156
Node: Invoking Bash265166
Node: Bash Startup Files271202
Node: Interactive Shells276330
Node: What is an Interactive Shell?276738
Node: Is this Shell Interactive?277384
Node: Interactive Shell Behavior278196
Node: Bash Conditional Expressions281822
Node: Shell Arithmetic286461
Node: Aliases289419
Node: Arrays292310
Node: The Directory Stack298868
Node: Directory Stack Builtins299649
Node: Controlling the Prompt303906
Node: The Restricted Shell306868
Node: Bash POSIX Mode309475
Node: Shell Compatibility Mode325633
Node: Job Control333874
Node: Job Control Basics334331
Node: Job Control Builtins339330
Node: Job Control Variables345122
Node: Command Line Editing346275
Node: Introduction and Notation347943
Node: Readline Interaction349563
Node: Readline Bare Essentials350751
Node: Readline Movement Commands352537
Node: Readline Killing Commands353494
Node: Readline Arguments355412
Node: Searching356453
Node: Readline Init File358636
Node: Readline Init File Syntax359894
Node: Conditional Init Constructs383916
Node: Sample Init File388109
Node: Bindable Readline Commands391230
Node: Commands For Moving392431
Node: Commands For History394479
Node: Commands For Text399470
Node: Commands For Killing403445
Node: Numeric Arguments406146
Node: Commands For Completion407282
Node: Keyboard Macros411470
Node: Miscellaneous Commands412155
Node: Readline vi Mode418190
Node: Programmable Completion419094
Node: Programmable Completion Builtins426871
Node: A Programmable Completion Example437988
Node: Using History Interactively443233
Node: Bash History Facilities443914
Node: Bash History Builtins446922
Node: History Interaction452010
Node: Event Designators455820
Node: Word Designators457355
Node: Modifiers459217
Node: Installing Bash461022
Node: Basic Installation462156
Node: Compilers and Options465875
Node: Compiling For Multiple Architectures466613
Node: Installation Names468302
Node: Specifying the System Type470408
Node: Sharing Defaults471122
Node: Operation Controls471792
Node: Optional Features472747
Node: Reporting Bugs483963
Node: Major Differences From The Bourne Shell485294
Node: GNU Free Documentation License502149
Node: Indexes527323
Node: Builtin Index527774
Node: Reserved Word Index534872
Node: Variable Index537317
Node: Function Index554448
Node: Concept Index568166
Node: Modifying Shell Behavior198142
Node: The Set Builtin198484
Node: The Shopt Builtin209455
Node: Special Builtins225590
Node: Shell Variables226566
Node: Bourne Shell Variables227000
Node: Bash Variables229101
Node: Bash Features264157
Node: Invoking Bash265167
Node: Bash Startup Files271203
Node: Interactive Shells276331
Node: What is an Interactive Shell?276739
Node: Is this Shell Interactive?277385
Node: Interactive Shell Behavior278197
Node: Bash Conditional Expressions281823
Node: Shell Arithmetic286733
Node: Aliases289691
Node: Arrays292582
Node: The Directory Stack299213
Node: Directory Stack Builtins299994
Node: Controlling the Prompt304251
Node: The Restricted Shell307213
Node: Bash POSIX Mode309820
Node: Shell Compatibility Mode325978
Node: Job Control334219
Node: Job Control Basics334676
Node: Job Control Builtins339675
Node: Job Control Variables345467
Node: Command Line Editing346620
Node: Introduction and Notation348288
Node: Readline Interaction349908
Node: Readline Bare Essentials351096
Node: Readline Movement Commands352882
Node: Readline Killing Commands353839
Node: Readline Arguments355757
Node: Searching356798
Node: Readline Init File358981
Node: Readline Init File Syntax360239
Node: Conditional Init Constructs384261
Node: Sample Init File388454
Node: Bindable Readline Commands391575
Node: Commands For Moving392776
Node: Commands For History394824
Node: Commands For Text399815
Node: Commands For Killing403790
Node: Numeric Arguments406491
Node: Commands For Completion407627
Node: Keyboard Macros411815
Node: Miscellaneous Commands412500
Node: Readline vi Mode418535
Node: Programmable Completion419439
Node: Programmable Completion Builtins427216
Node: A Programmable Completion Example438333
Node: Using History Interactively443578
Node: Bash History Facilities444259
Node: Bash History Builtins447267
Node: History Interaction452355
Node: Event Designators456165
Node: Word Designators457700
Node: Modifiers459562
Node: Installing Bash461367
Node: Basic Installation462501
Node: Compilers and Options466220
Node: Compiling For Multiple Architectures466958
Node: Installation Names468647
Node: Specifying the System Type470753
Node: Sharing Defaults471467
Node: Operation Controls472137
Node: Optional Features473092
Node: Reporting Bugs484308
Node: Major Differences From The Bourne Shell485639
Node: GNU Free Documentation License502494
Node: Indexes527668
Node: Builtin Index528119
Node: Reserved Word Index535217
Node: Variable Index537662
Node: Function Index554793
Node: Concept Index568511

End Tag Table
+112 -107
View File
@@ -2,9 +2,9 @@ This is bashref.info, produced by makeinfo version 6.8 from
bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 15 August 2023).
Bash shell (version 5.3, 31 August 2023).
This is Edition 5.3, last updated 15 August 2023, of 'The GNU Bash
This is Edition 5.3, last updated 31 August 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.3.
Copyright (C) 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, 15 August 2023). The Bash home page is
Bash shell (version 5.3, 31 August 2023). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 15 August 2023, of 'The GNU Bash
This is Edition 5.3, last updated 31 August 2023, of 'The GNU Bash
Reference Manual', for 'Bash', Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -4228,6 +4228,7 @@ standard.
'%Q'
like '%q', but applies any supplied precision to the ARGUMENT
before quoting it.
'%(DATEFMT)T'
Causes 'printf' to output the date-time string resulting from
using DATEFMT as a format string for 'strftime'(3). The
@@ -6630,7 +6631,10 @@ link itself.
'-v VARNAME'
True if the shell variable VARNAME is set (has been assigned a
value).
value). If VARNAME is an indexed array variable name subscripted
by '@' or '*', this returns true if the array has any set elements.
If VARNAME is an associative array variable name subscripted by '@'
or '*', this returns true if an element with that key is set.
'-R VARNAME'
True if the shell variable VARNAME is set and is a name reference.
@@ -6896,23 +6900,24 @@ above.
Any element of an array may be referenced using '${NAME[SUBSCRIPT]}'.
The braces are required to avoid conflicts with the shell's filename
expansion operators. If the SUBSCRIPT is '@' or '*', the word expands
to all members of the array NAME. These subscripts differ only when the
word appears within double quotes. If the word is double-quoted,
'${NAME[*]}' expands to a single word with the value of each array
member separated by the first character of the 'IFS' variable, and
'${NAME[@]}' expands each element of NAME to a separate word. When
there are no array members, '${NAME[@]}' expands to nothing. If the
double-quoted expansion occurs within a word, the expansion of the first
parameter is joined with the beginning part of the original word, and
the expansion of the last parameter is joined with the last part of the
original word. This is analogous to the expansion of the special
parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the length of
'${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the expansion is the
number of elements in the array. If the SUBSCRIPT used to reference an
element of an indexed array evaluates to a number less than zero, it is
interpreted as relative to one greater than the maximum index of the
array, so negative indices count back from the end of the array, and an
index of -1 refers to the last element.
to all members of the array NAME, unless otherwise noted in the
description of a builtin or word expansion. These subscripts differ
only when the word appears within double quotes. If the word is
double-quoted, '${NAME[*]}' expands to a single word with the value of
each array member separated by the first character of the 'IFS'
variable, and '${NAME[@]}' expands each element of NAME to a separate
word. When there are no array members, '${NAME[@]}' expands to nothing.
If the double-quoted expansion occurs within a word, the expansion of
the first parameter is joined with the beginning part of the original
word, and the expansion of the last parameter is joined with the last
part of the original word. This is analogous to the expansion of the
special parameters '@' and '*'. '${#NAME[SUBSCRIPT]}' expands to the
length of '${NAME[SUBSCRIPT]}'. If SUBSCRIPT is '@' or '*', the
expansion is the number of elements in the array. If the SUBSCRIPT used
to reference an element of an indexed array evaluates to a number less
than zero, it is interpreted as relative to one greater than the maximum
index of the array, so negative indices count back from the end of the
array, and an index of -1 refers to the last element.
Referencing an array variable without a subscript is equivalent to
referencing with a subscript of 0. Any reference to a variable using a
@@ -12163,8 +12168,8 @@ D.1 Index of Shell Builtin Commands
(line 69)
* pwd: Bourne Shell Builtins.
(line 218)
* read: Bash Builtins. (line 513)
* readarray: Bash Builtins. (line 616)
* read: Bash Builtins. (line 514)
* readarray: Bash Builtins. (line 617)
* readonly: Bourne Shell Builtins.
(line 228)
* return: Bourne Shell Builtins.
@@ -12173,7 +12178,7 @@ D.1 Index of Shell Builtin Commands
* shift: Bourne Shell Builtins.
(line 268)
* shopt: The Shopt Builtin. (line 9)
* source: Bash Builtins. (line 625)
* source: Bash Builtins. (line 626)
* suspend: Job Control Builtins.
(line 116)
* test: Bourne Shell Builtins.
@@ -12184,12 +12189,12 @@ D.1 Index of Shell Builtin Commands
(line 389)
* true: Bourne Shell Builtins.
(line 451)
* type: Bash Builtins. (line 630)
* typeset: Bash Builtins. (line 668)
* ulimit: Bash Builtins. (line 674)
* type: Bash Builtins. (line 631)
* typeset: Bash Builtins. (line 669)
* ulimit: Bash Builtins. (line 675)
* umask: Bourne Shell Builtins.
(line 456)
* unalias: Bash Builtins. (line 780)
* unalias: Bash Builtins. (line 781)
* unset: Bourne Shell Builtins.
(line 474)
* wait: Job Control Builtins.
@@ -12919,84 +12924,84 @@ Node: Shell Scripts137167
Node: Shell Builtin Commands140194
Node: Bourne Shell Builtins142232
Node: Bash Builtins165368
Node: Modifying Shell Behavior198306
Node: The Set Builtin198651
Node: The Shopt Builtin209625
Node: Special Builtins225763
Node: Shell Variables226742
Node: Bourne Shell Variables227179
Node: Bash Variables229283
Node: Bash Features264342
Node: Invoking Bash265355
Node: Bash Startup Files271394
Node: Interactive Shells276525
Node: What is an Interactive Shell?276936
Node: Is this Shell Interactive?277585
Node: Interactive Shell Behavior278400
Node: Bash Conditional Expressions282029
Node: Shell Arithmetic286671
Node: Aliases289632
Node: Arrays292526
Node: The Directory Stack299087
Node: Directory Stack Builtins299871
Node: Controlling the Prompt304131
Node: The Restricted Shell307096
Node: Bash POSIX Mode309706
Node: Shell Compatibility Mode325867
Node: Job Control334111
Node: Job Control Basics334571
Node: Job Control Builtins339573
Node: Job Control Variables345368
Node: Command Line Editing346524
Node: Introduction and Notation348195
Node: Readline Interaction349818
Node: Readline Bare Essentials351009
Node: Readline Movement Commands352798
Node: Readline Killing Commands353758
Node: Readline Arguments355679
Node: Searching356723
Node: Readline Init File358909
Node: Readline Init File Syntax360170
Node: Conditional Init Constructs384195
Node: Sample Init File388391
Node: Bindable Readline Commands391515
Node: Commands For Moving392719
Node: Commands For History394770
Node: Commands For Text399764
Node: Commands For Killing403742
Node: Numeric Arguments406446
Node: Commands For Completion407585
Node: Keyboard Macros411776
Node: Miscellaneous Commands412464
Node: Readline vi Mode418502
Node: Programmable Completion419409
Node: Programmable Completion Builtins427189
Node: A Programmable Completion Example438309
Node: Using History Interactively443557
Node: Bash History Facilities444241
Node: Bash History Builtins447252
Node: History Interaction452343
Node: Event Designators456156
Node: Word Designators457694
Node: Modifiers459559
Node: Installing Bash461367
Node: Basic Installation462504
Node: Compilers and Options466226
Node: Compiling For Multiple Architectures466967
Node: Installation Names468659
Node: Specifying the System Type470768
Node: Sharing Defaults471485
Node: Operation Controls472158
Node: Optional Features473116
Node: Reporting Bugs484335
Node: Major Differences From The Bourne Shell485669
Node: GNU Free Documentation License502527
Node: Indexes527704
Node: Builtin Index528158
Node: Reserved Word Index535259
Node: Variable Index537707
Node: Function Index554841
Node: Concept Index568562
Node: Modifying Shell Behavior198307
Node: The Set Builtin198652
Node: The Shopt Builtin209626
Node: Special Builtins225764
Node: Shell Variables226743
Node: Bourne Shell Variables227180
Node: Bash Variables229284
Node: Bash Features264343
Node: Invoking Bash265356
Node: Bash Startup Files271395
Node: Interactive Shells276526
Node: What is an Interactive Shell?276937
Node: Is this Shell Interactive?277586
Node: Interactive Shell Behavior278401
Node: Bash Conditional Expressions282030
Node: Shell Arithmetic286943
Node: Aliases289904
Node: Arrays292798
Node: The Directory Stack299432
Node: Directory Stack Builtins300216
Node: Controlling the Prompt304476
Node: The Restricted Shell307441
Node: Bash POSIX Mode310051
Node: Shell Compatibility Mode326212
Node: Job Control334456
Node: Job Control Basics334916
Node: Job Control Builtins339918
Node: Job Control Variables345713
Node: Command Line Editing346869
Node: Introduction and Notation348540
Node: Readline Interaction350163
Node: Readline Bare Essentials351354
Node: Readline Movement Commands353143
Node: Readline Killing Commands354103
Node: Readline Arguments356024
Node: Searching357068
Node: Readline Init File359254
Node: Readline Init File Syntax360515
Node: Conditional Init Constructs384540
Node: Sample Init File388736
Node: Bindable Readline Commands391860
Node: Commands For Moving393064
Node: Commands For History395115
Node: Commands For Text400109
Node: Commands For Killing404087
Node: Numeric Arguments406791
Node: Commands For Completion407930
Node: Keyboard Macros412121
Node: Miscellaneous Commands412809
Node: Readline vi Mode418847
Node: Programmable Completion419754
Node: Programmable Completion Builtins427534
Node: A Programmable Completion Example438654
Node: Using History Interactively443902
Node: Bash History Facilities444586
Node: Bash History Builtins447597
Node: History Interaction452688
Node: Event Designators456501
Node: Word Designators458039
Node: Modifiers459904
Node: Installing Bash461712
Node: Basic Installation462849
Node: Compilers and Options466571
Node: Compiling For Multiple Architectures467312
Node: Installation Names469004
Node: Specifying the System Type471113
Node: Sharing Defaults471830
Node: Operation Controls472503
Node: Optional Features473461
Node: Reporting Bugs484680
Node: Major Differences From The Bourne Shell486014
Node: GNU Free Documentation License502872
Node: Indexes528049
Node: Builtin Index528503
Node: Reserved Word Index535604
Node: Variable Index538052
Node: Function Index555186
Node: Concept Index568907

End Tag Table
+6
View File
@@ -5023,6 +5023,7 @@ formats quote the argument string using single quotes.
@item %Q
like @code{%q}, but applies any supplied precision to the @var{argument}
before quoting it.
@item %(@var{datefmt})T
Causes @code{printf} to output the date-time string resulting from using
@var{datefmt} as a format string for @code{strftime}(3).
@@ -5047,6 +5048,11 @@ The %s and %c format specifiers accept an l (long) modifier, which forces
them to convert the argument string to a wide-character string and apply
any supplied field width and precision in terms of characters, not bytes.
@ignore
The %s format specifier understands the "altform" flag (#) and behaves
identically to the %b format specifier if it's supplied.
@end ignore
Arguments to non-string format specifiers are treated as C language constants,
except that a leading plus or minus sign is allowed, and if the leading
character is a single or double quote, the value is the ASCII value of
+2 -2
View File
@@ -2,10 +2,10 @@
Copyright (C) 1988-2023 Free Software Foundation, Inc.
@end ignore
@set LASTCHANGE Fri Aug 25 11:58:00 EDT 2023
@set LASTCHANGE Thu Aug 31 15:48:06 EDT 2023
@set EDITION 5.3
@set VERSION 5.3
@set UPDATED 25 August 2023
@set UPDATED 31 August 2023
@set UPDATED-MONTH August 2023
+2 -1
View File
@@ -331,7 +331,8 @@ parse_command (void)
int r;
need_here_doc = 0;
run_pending_traps ();
if ((parser_state & (PST_CMDSUBST|PST_FUNSUBST)) == 0)
run_pending_traps ();
/* Allow the execution of a random command just before the printing
of each primary prompt. If the shell variable PROMPT_COMMAND
+2 -2
View File
@@ -2,7 +2,7 @@
Modified by Chet Ramey for Readline.
Copyright (C) 1985, 1988, 1990-1991, 1995-2021
Copyright (C) 1985, 1988, 1990-1991, 1995-2021, 2023
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
@@ -73,7 +73,7 @@
static bool is_colored (enum indicator_no type);
static void restore_default_color (void);
#define RL_COLOR_PREFIX_EXTENSION "readline-colored-completion-prefix"
#define RL_COLOR_PREFIX_EXTENSION ".readline-colored-completion-prefix"
COLOR_EXT_TYPE *_rl_color_ext_list = 0;
+36 -9
View File
@@ -297,6 +297,22 @@ get_funky_string (char **dest, const char **src, bool equals_end, size_t *output
}
#endif /* COLOR_SUPPORT */
static void
free_color_ext_list (void)
{
COLOR_EXT_TYPE *e;
COLOR_EXT_TYPE *e2;
for (e = _rl_color_ext_list; e != NULL; /* empty */)
{
e2 = e;
e = e->next;
free (e2);
}
_rl_color_ext_list = 0;
}
void _rl_parse_colors(void)
{
#if defined (COLOR_SUPPORT)
@@ -420,21 +436,32 @@ void _rl_parse_colors(void)
if (state < 0)
{
COLOR_EXT_TYPE *e;
COLOR_EXT_TYPE *e2;
_rl_errmsg ("unparsable value for LS_COLORS environment variable");
free (color_buf);
for (e = _rl_color_ext_list; e != NULL; /* empty */)
{
e2 = e;
e = e->next;
free (e2);
}
_rl_color_ext_list = NULL;
free_color_ext_list ();
_rl_colored_stats = 0; /* can't have colored stats without colors */
_rl_colored_completion_prefix = 0; /* or colored prefixes */
}
#else /* !COLOR_SUPPORT */
;
#endif /* !COLOR_SUPPORT */
}
void
rl_reparse_colors (void)
{
char *v;
v = sh_get_env_value ("LS_COLORS");
if (v == 0 && color_buf == 0)
return; /* no change */
if (v && color_buf && STREQ (v, color_buf))
return; /* no change */
free (color_buf);
free_color_ext_list ();
_rl_parse_colors ();
}
+2
View File
@@ -3223,6 +3223,8 @@ time_command_acceptable (void)
case TIME: /* time time pipeline */
case TIMEOPT: /* time -p time pipeline */
case TIMEIGN: /* time -p -- ... */
case DOLPAREN:
case DOLBRACE:
return 1;
default:
return 0;
BIN
View File
Binary file not shown.
+63 -63
View File
@@ -1,23 +1,23 @@
# Georgian translation for bash.
# Copyright (C) 2022 Free Software Foundation, Inc.
# This file is distributed under the same license as the bash package.
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: bash-5.2-rc1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-11 14:50-0500\n"
"PO-Revision-Date: 2022-10-17 09:45+0200\n"
"PO-Revision-Date: 2023-09-02 11:33+0200\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <(nothing)>\n"
"Language: ka\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.1.1\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.3.2\n"
#: arrayfunc.c:66
msgid "bad array subscript"
@@ -51,42 +51,42 @@ msgstr "%s: შექმნის შეცდომა: %s"
#: bashline.c:4479
msgid "bash_execute_unix_command: cannot find keymap for command"
msgstr ""
msgstr "bash_execute_unix_command: ბრძანებისთვის განლაგება ვერ ვიპოვე"
#: bashline.c:4637
#, c-format
msgid "%s: first non-whitespace character is not `\"'"
msgstr ""
msgstr "%s: პირველი არა-გამოტოვების სიმბოლო `\"' არაა"
#: bashline.c:4666
#, c-format
msgid "no closing `%c' in %s"
msgstr ""
msgstr "'%c' %s-ში არ იხურება"
#: bashline.c:4697
#, c-format
msgid "%s: missing colon separator"
msgstr ""
msgstr "%s: სვეტის გამყოფი აღმოჩენილი არაა"
#: bashline.c:4733
#, c-format
msgid "`%s': cannot unbind in command keymap"
msgstr ""
msgstr "`%s': ბრძანების განლაგებაში მოხსნა შეუძლებელია"
#: braces.c:327
#, c-format
msgid "brace expansion: cannot allocate memory for %s"
msgstr ""
msgstr "ფრჩხილის გაფართოება: %s-სთვის მეხსიერების გამოყოფა შეუძლებელია"
#: braces.c:406
#, c-format
msgid "brace expansion: failed to allocate memory for %u elements"
msgstr ""
msgstr "ფრჩხილის გაფართოება: %u ელემენტისთვის მეხსიერების გამოყოფა შეუძლებელია"
#: braces.c:451
#, c-format
msgid "brace expansion: failed to allocate memory for `%s'"
msgstr ""
msgstr "ფრთხილის გაფართოება: '%s'-სთვის მეხსიერების გამოყოფა ჩავარდა"
#: builtins/alias.def:131 variables.c:1817
#, c-format
@@ -100,7 +100,7 @@ msgstr "ხაზის ჩასწორება ჩართული არ
#: builtins/bind.def:212
#, c-format
msgid "`%s': invalid keymap name"
msgstr ""
msgstr "`%s': არასწორი განლაგების სახელი"
#: builtins/bind.def:252
#, c-format
@@ -115,12 +115,12 @@ msgstr "`%s': ფუნქციის უცნობი სახელი"
#: builtins/bind.def:336
#, c-format
msgid "%s is not bound to any keys.\n"
msgstr ""
msgstr "%s ღილაკზე მიბმული არაა.\n"
#: builtins/bind.def:340
#, c-format
msgid "%s can be invoked via "
msgstr ""
msgstr "%s შეგიძლიათ გამოიძახოთ გავლით "
#: builtins/bind.def:378 builtins/bind.def:395
#, c-format
@@ -133,7 +133,7 @@ msgstr "მარყუჟის რიცხვი"
#: builtins/break.def:139
msgid "only meaningful in a `for', `while', or `until' loop"
msgstr ""
msgstr "აზრი მხოლოდ `for', `while' ან `until' ციკლებისთვის გააჩნია"
#: builtins/caller.def:136
msgid ""
@@ -228,7 +228,7 @@ msgstr "%s: სიგნალის არასწორი სპეციფ
#: builtins/common.c:259
#, c-format
msgid "`%s': not a pid or valid job spec"
msgstr ""
msgstr "`%s': არ წარმოადგენს PID-ს ან სწორ დავალების სპეციფიკაციას"
#: builtins/common.c:266 error.c:536
#, c-format
@@ -305,7 +305,7 @@ msgstr "%s: მიმდინარე საქაღალდის მიღ
#: builtins/common.c:708 builtins/common.c:710
#, c-format
msgid "%s: ambiguous job spec"
msgstr ""
msgstr "%s: გაურკვეველი დავალების სპეციფიკაცია"
#: builtins/common.c:971
msgid "help not available in this version"
@@ -330,19 +330,19 @@ msgstr "%s: ქმედების არასწორი სახელი
#: builtins/complete.def:873
#, c-format
msgid "%s: no completion specification"
msgstr ""
msgstr "%s: დასრულება აღწერილი არაა"
#: builtins/complete.def:696
msgid "warning: -F option may not work as you expect"
msgstr ""
msgstr "გაფრთხილება: პარამეტრმა -F შეიძლება ისე, როგორც თქვენ ელით, არ იმუშაოს"
#: builtins/complete.def:698
msgid "warning: -C option may not work as you expect"
msgstr ""
msgstr "გაფრთხილება: პარამეტრმა -C შეიძლება ისე, როგორც თქვენ ელით, არ იმუშაოს"
#: builtins/complete.def:846
msgid "not currently executing completion function"
msgstr ""
msgstr "ამჟამად დასრულების ფუნქციას არ ასრულებს"
#: builtins/declare.def:137
msgid "can only be used in a function"
@@ -492,7 +492,7 @@ msgstr "მიმდინარე"
#: builtins/fg_bg.def:161
#, c-format
msgid "job %d started without job control"
msgstr ""
msgstr "დავალება %d დავალებების კონტროლის გარეშე გაეშვა"
#: builtins/getopt.c:110
#, c-format
@@ -521,8 +521,8 @@ msgstr "hits\tcommand\n"
#: builtins/help.def:133
msgid "Shell commands matching keyword `"
msgid_plural "Shell commands matching keywords `"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "გარსის ბრძანება, რომლებიც ემთხვევა საკვანძო სიტყვას `"
msgstr[1] "გარსის ბრძანება, რომლებიც ემთხვევა საკვანძო სიტყვას `"
#: builtins/help.def:135
msgid ""
@@ -556,7 +556,7 @@ msgstr ""
#: builtins/history.def:159
msgid "cannot use more than one of -anrw"
msgstr ""
msgstr "-anrw-დან მხოლოდ ერთი შეგიძლიათ, გამოიყენოთ"
#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
@@ -571,7 +571,7 @@ msgstr "%s: არასწორი დროის შტამპი"
#: builtins/history.def:449
#, c-format
msgid "%s: history expansion failed"
msgstr ""
msgstr "%s: ისტორიის გაფართოება ჩავარდა"
#: builtins/inlib.def:71
#, c-format
@@ -580,12 +580,12 @@ msgstr "%s: inlib -ის შეცდომა"
#: builtins/jobs.def:109
msgid "no other options allowed with `-x'"
msgstr ""
msgstr "'-x'-თან ერთად სხვა პარამეტრები დაშვებული არაა"
#: builtins/kill.def:211
#, c-format
msgid "%s: arguments must be process or job IDs"
msgstr ""
msgstr "%s: არგუმენტები პროცესები ან დავალების ID-ები უნდა იყოს"
#: builtins/kill.def:274
msgid "Unknown error"
@@ -603,7 +603,7 @@ msgstr "%s: ინდექსირებულ მასივს არ წ
#: builtins/mapfile.def:276 builtins/read.def:336
#, c-format
msgid "%s: invalid file descriptor specification"
msgstr ""
msgstr "%s: არასწორი ფაილის დესკრიპტორის აღწერა"
#: builtins/mapfile.def:284 builtins/read.def:343
#, c-format
@@ -627,26 +627,26 @@ msgstr ""
#: builtins/mapfile.def:354
msgid "empty array variable name"
msgstr ""
msgstr "ცარიელი მასივის ცვლადის სახელი"
#: builtins/mapfile.def:375
msgid "array variable support required"
msgstr ""
msgstr "მასივის ცვლადის მხარდაჭერა აუცილებელია"
#: builtins/printf.def:430
#, c-format
msgid "`%s': missing format character"
msgstr ""
msgstr "`%s': აკლია ფორმატის სიმბოლო"
#: builtins/printf.def:485
#, c-format
msgid "`%c': invalid time format specification"
msgstr ""
msgstr "`%c': არასწორი დროის ფორმატის სპეციფიკაცია"
#: builtins/printf.def:708
#, c-format
msgid "`%c': invalid format character"
msgstr ""
msgstr "`%c': არასწორი ფორმატის სიმბოლო"
#: builtins/printf.def:734
#, c-format
@@ -678,7 +678,7 @@ msgstr "%s: არასწორი არგუმენტი"
#: builtins/pushd.def:480
msgid "<no current directory>"
msgstr ""
msgstr "<მიმდინარე საქაღალდის გარეშე>"
#: builtins/pushd.def:524
msgid "directory stack empty"
@@ -759,7 +759,7 @@ msgstr ""
#: builtins/read.def:308
#, c-format
msgid "%s: invalid timeout specification"
msgstr ""
msgstr "%s: არასწორი ვადის სპეციფიკაცია"
#: builtins/read.def:827
#, c-format
@@ -876,7 +876,7 @@ msgstr "ლიმიტი"
#: builtins/ulimit.def:502 builtins/ulimit.def:802
#, c-format
msgid "%s: cannot modify limit: %s"
msgstr ""
msgstr "%s: ვერ შევცვალე ლიმიტი: %s"
#: builtins/umask.def:115
msgid "octal number"
@@ -885,12 +885,12 @@ msgstr "რვაობითი რიცხვი"
#: builtins/umask.def:232
#, c-format
msgid "`%c': invalid symbolic mode operator"
msgstr ""
msgstr "`%c': არასწორი სიმბოლური რეჟიმის ოპერატორი"
#: builtins/umask.def:287
#, c-format
msgid "`%c': invalid symbolic mode character"
msgstr ""
msgstr "`%c': არასწორი სიმბოლური რეჟიმის სიმბოლო"
#: error.c:89 error.c:373 error.c:375 error.c:377
msgid " line "
@@ -955,7 +955,7 @@ msgstr "TIMEFORMAT: `%c': ფორმატის არასწორი ს
#: execute_cmd.c:2391
#, c-format
msgid "execute_coproc: coproc [%d:%s] still exists"
msgstr ""
msgstr "execute_coproc: თანაპროცესი [%d:%s] ჯერ კიდევ არსებობს"
#: execute_cmd.c:2524
msgid "pipe error"
@@ -1004,7 +1004,7 @@ msgstr "%s: %s: არასწორი ინტერპრეტატორ
#: execute_cmd.c:6037
#, c-format
msgid "%s: cannot execute binary file: %s"
msgstr ""
msgstr "%s: ბინარული ფაილის გაშვება შეუძლებელია: %s"
#: execute_cmd.c:6123
#, c-format
@@ -1018,7 +1018,7 @@ msgstr ""
#: expr.c:263
msgid "expression recursion level exceeded"
msgstr ""
msgstr "გადაჭარბებულია გამოსახულების რეკურსიის დონე"
#: expr.c:291
msgid "recursion stack underflow"
@@ -1107,11 +1107,11 @@ msgstr ""
#: input.c:274
#, c-format
msgid "save_bash_input: buffer already exists for new fd %d"
msgstr ""
msgstr "save_bash_input: ბუფერი უკვე არსებობს ახალი fd-სთვის %d"
#: jobs.c:543
msgid "start_pipeline: pgrp pipe"
msgstr ""
msgstr "start_pipeline: pgrp pipe"
#: jobs.c:907
#, c-format
@@ -1136,12 +1136,12 @@ msgstr ""
#: jobs.c:1502
#, c-format
msgid "add_process: pid %5ld (%s) marked as still alive"
msgstr ""
msgstr "add_process: pid %5ld (%s) ჯერ კიდევ, როგორც ცოცხალია, მონიშნული"
#: jobs.c:1839
#, c-format
msgid "describe_pid: %ld: no such pid"
msgstr ""
msgstr "describe_pid: %ld: ასეთი pid არ არსებობს"
#: jobs.c:1854
#, c-format
@@ -1202,12 +1202,12 @@ msgstr ""
#: jobs.c:2884
#, c-format
msgid "wait_for: No record of process %ld"
msgstr ""
msgstr "wait_for: არ არსებობს ჩანაწერი პროცესისთვის %ld"
#: jobs.c:3223
#, c-format
msgid "wait_for_job: job %d is stopped"
msgstr ""
msgstr "wait_for_job: დავალება %d გაჩერებულია"
#: jobs.c:3551
#, c-format
@@ -1222,7 +1222,7 @@ msgstr "%s: დავალება შეწყდა"
#: jobs.c:3567
#, c-format
msgid "%s: job %d already in background"
msgstr ""
msgstr "%s: დავალება %d უკვე ფონურია"
#: jobs.c:3793
msgid "waitchld: turning on WNOHANG to avoid indefinite block"
@@ -1236,7 +1236,7 @@ msgstr "%s: ხაზი %d: "
#: jobs.c:4321 nojobs.c:921
#, c-format
msgid " (core dumped)"
msgstr ""
msgstr " (ბირთვი ჩაწერილია)"
#: jobs.c:4333 jobs.c:4346
#, c-format
@@ -1266,7 +1266,7 @@ msgstr ""
#: jobs.c:4495
msgid "no job control in this shell"
msgstr ""
msgstr "ამ გარსს დავალებების კონტროლი არ შეუძლია"
#: lib/malloc/malloc.c:367
#, c-format
@@ -1365,22 +1365,22 @@ msgstr "ქსელური ოპერაციები მხარდა
#: locale.c:219
#, c-format
msgid "setlocale: LC_ALL: cannot change locale (%s)"
msgstr ""
msgstr "setlocale: LC_ALL: ვერ შევცვალე ლოკალი (%s)"
#: locale.c:221
#, c-format
msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
msgstr ""
msgstr "setlocale: LC_ALL: ვერ შევცვალე ლოკალი (%s): %s"
#: locale.c:294
#, c-format
msgid "setlocale: %s: cannot change locale (%s)"
msgstr ""
msgstr "setlocale: %s: ვერ შევცვალე ლოკალი (%s)"
#: locale.c:296
#, c-format
msgid "setlocale: %s: cannot change locale (%s): %s"
msgstr ""
msgstr "setlocale: %s: ვერ შევცვალე ლოკალი (%s): %s"
#: mailcheck.c:439
msgid "You have mail in $_"
@@ -1393,7 +1393,7 @@ msgstr "$_ -ში ახალი ელფოსტა გაქვთ"
#: mailcheck.c:480
#, c-format
msgid "The mail in %s has been read\n"
msgstr ""
msgstr "ელფოსტა %s-ში წაკითხულია\n"
#: make_cmd.c:314
msgid "syntax error: arithmetic expression required"
@@ -1411,7 +1411,7 @@ msgstr "სინტაქსის შეცდომა: `((%s))'"
#: make_cmd.c:569
#, c-format
msgid "make_here_document: bad instruction type %d"
msgstr ""
msgstr "make_here_document: არასწორი ინსტრუქციის ტიპი %d"
#: make_cmd.c:668
#, c-format
@@ -1448,16 +1448,16 @@ msgstr ""
#: parse.y:4461
msgid "syntax error in conditional expression"
msgstr ""
msgstr "სინტაქსის შეცდომა პირობით გამოსახულებაში"
#: parse.y:4539
#, c-format
msgid "unexpected token `%s', expected `)'"
msgstr ""
msgstr "მოულოდნელი კოდი `%s', მოველოდი `)'"
#: parse.y:4543
msgid "expected `)'"
msgstr ""
msgstr "მოველოდი `)'"
#: parse.y:4571
#, c-format
@@ -1471,11 +1471,11 @@ msgstr ""
#: parse.y:4621
#, c-format
msgid "unexpected token `%s', conditional binary operator expected"
msgstr ""
msgstr "მოულოდნელი კოდი '%s'. მოველოდი პირობით ბინარულ ოპერატორს"
#: parse.y:4625
msgid "conditional binary operator expected"
msgstr ""
msgstr "მოველოდი პირობით ბინარულ ოპერატორს"
#: parse.y:4647
#, c-format
+1 -1
View File
@@ -53,7 +53,7 @@ echo abcde | {
echo $a
}
read -t .0001 a <<<abcde
read -t .001 a <<<abcde
echo $a
# this is the original test that prompted the change to sh_timers
+1 -2
View File
@@ -57,10 +57,9 @@ echo abcde | {
echo $a
}
read -e -t .0001 a <<<abcde
read -e -t .001 a <<<abcde
echo $a
set -o posix
read -t 0.1 a </dev/tty
echo $a