-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
5545 lines (3724 loc) · 216 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
This document details the changes between this version, bash-3.2-release,
and the previous version, bash-3.2-beta.
1. Changes to Bash
a. Fixed a bug that caused the temporary environment passed to a command to
affect the shell's environment under certain circumstances.
b. Fixed a bug in the printf builtin that caused the %q format specifier to
ignore empty string arguments.
c. Improved multibyte character environment detection at configuration time.
d. Fixed a bug in the read builtin that left spurious escape characters in the
input after processing backslashes when assigning to an array variable.
2. Changes to Readline
a. Fixed a redisplay bug that occurred in multibyte-capable locales when the
prompt was one character longer than the screen width.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.2-beta,
and the previous version, bash-3.2-alpha.
1. Changes to Bash
a. Changed the lexical analyzer to treat locale-specific blank characters as
white space.
b. Fixed a bug in command printing to avoid confusion between redirections and
process substitution.
c. Fixed problems with cross-compiling originating from inherited environment
variables.
d. Added write error reporting to printf builtin.
e. Fixed a bug in the variable expansion code that could cause a core dump in
a multi-byte locale.
f. Fixed a bug that caused substring expansion of a null string to return
incorrect results.
g. BASH_COMMAND now retains its previous value while executing commands as the
result of a trap, as the documentation states.
2. Changes to Readline
a. Fixed a bug with prompt redisplay in a multi-byte locale to avoid redrawing
the prompt and input line multiple times.
b. Fixed history expansion to not be confused by here-string redirection.
c. Readline no longer treats read errors by converting them to newlines, as
it does with EOF. This caused partial lines to be returned from readline().
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.2-alpha,
and the previous version, bash-3.1-release.
1. Changes to Bash
a. Fixed a source bug that caused the minimal configuration to not compile.
b. Fixed memory leaks in error handling for the `read' builtin.
c. Changed the [[ and (( compound commands to set PIPESTATUS with their exit
status.
d. Fixed some parsing problems with compound array assignments.
e. Added additional configuration changes for: NetBSD (incomplete multibyte
character support)
f. Fixed two bugs with local array variable creation when shadowing a variable
of the same name from a previous context.
g. Fixed the `read' builtin to restore the correct set of completion functions
if a timeout occurs.
h. Added code to defer the initialization of HISTSIZE (and its stifling of the
history list) until the history file is loaded, allowing a startup file to
override the default value.
i. Tightened up the arithmetic expression parsing to produce better error
messages when presented with invalid operators.
j. Fixed the cross-compilation support to build the signal list at shell
invocation rather than compile time if cross-compiling.
k. Fixed multibyte support for non-gcc compilers (or compilers that do not
allow automatic array variable sizing based on a non-constant value).
l. Several fixes to the code that manages the list of terminated jobs and
their exit statuses, and the list of active and recently-terminated jobs
to avoid pid aliasing/wraparound and allocation errors.
m. Fixed a problem that allowed scripts to die due to SIGINT while waiting
for children, even when started in the background or otherwise ignoring
SIGINT.
n. Fixed a bug that caused shells invoked as -/bin/bash from not being
recognized as login shells.
o. Fixed a problem that caused shells in the background to give the terminal
to a process group other than the foreground shell process group.
p. Fixed a problem with extracting the `varname' in ${#varname}.
q. Fixed the code that handles SIGQUIT to not exit immediately -- thereby
calling functions that may not be called in a signal handler context --
but set a flag and exit afterward (like SIGINT).
r. Changed the brace expansion code to skip over braces that don't begin a
valid matched brace expansion construct.
s. Fixed `typeset' and `declare' to not require that their shell function
operands to be valid shell identifiers.
t. Changed `test' to use access(2) with a temporary uid/euid swap when testing
file attributes and running setuid, and access(2) in most other cases.
u. Changed completion code to not attempt command name completion on a line
consisting solely of whitespace when no_empty_command_completion is set.
v. The `hash' builtin now prints nothing in posix mode when the hash table is
empty, and prints a message to that effect to stdout instead of stderr
when not in posix mode.
w. Fixed a bug in the extended pattern matching code that caused it to fail to
match periods with certain patterns.
x. Fixed a bug that caused the shell to dump core when performing filename
generation in directories with thousands of files.
y. Returned to the original Bourne shell rules for parsing ``: no recursive
parsing of embedded quoted strings or ${...} constructs.
z. The inheritence of the DEBUG, RETURN, and ERR traps is now dependent only
on the settings of the `functrace' and `errtrace' shell options, rather
than whether or not the shell is in debugging mode.
aa. Fixed a problem with $HOME being converted to ~ in the expansion of
members of the DIRSTACK array.
bb. Fixed a problem with quoted arguments to arithmetic expansions in certain
constructs.
cc. The command word completion code now no longer returns matching directories
while searching $PATH.
dd. Fixed a bug with zero-padding and precision handling in snprintf()
replacement.
ee. Fixed a bug that caused the command substitution code not to take embedded
shell comments into account.
ff. Fixed a bug that caused $((...);(...)) to be misinterpreted as an
arithmetic substitution.
gg. Fixed a bug in the prompt expansion code that inappropriately added a
\001 before a \002 under certain circumstances.
hh. Fixed a bug that caused `unset LANG' to not properly reset the locale
(previous versions would set the locale back to what it was when bash
was started rather than the system's "native" locale).
ii. Fixed a bug that could cause file descriptors > 10 to not be closed even
when closed explicitly by a script.
jj. Fixed a bug that caused single quotes to be stripped from ANSI-C quoting
inside double-quoted command substitutions.
kk. Fixed a bug that could cause core dumps when `return' was executed as the
last element of a pipeline inside a shell function.
ll. Fixed a bug that caused DEBUG trap strings to overwrite commands stored in
the jobs list.
2. Changes to Readline
a. Fixed a problem that caused segmentation faults when using readline in
callback mode and typing consecutive DEL characters on an empty line.
b. Fixed several redisplay problems with multibyte characters, all having to
do with the different code paths and variable meanings between single-byte
and multibyte character redisplay.
c. Fixed a problem with key sequence translation when presented with the
sequence \M-\C-x.
d. Fixed a problem that prevented the `a' command in vi mode from being
undone and redone properly.
e. Fixed a problem that prevented empty inserts in vi mode from being undone
properly.
f. Fixed a problem that caused readline to initialize with an incorrect idea
of whether or not the terminal can autowrap.
g. Fixed output of key bindings (like bash `bind -p') to honor the setting of
convert-meta and use \e where appropriate.
h. Changed the default filename completion function to call the filename
dequoting function if the directory completion hook isn't set. This means
that any directory completion hooks need to dequote the directory name,
since application-specific hooks need to know how the word was quoted,
even if no other changes are made.
i. Fixed a bug with creating the prompt for a non-interactive search string
when there are non-printing characters in the primary prompt.
j. Fixed a bug that caused prompts with invisible characters to be redrawn
multiple times in a multibyte locale.
k. Fixed a bug that could cause the key sequence scanning code to return the
wrong function.
l. Fixed a problem with the callback interface that caused it to fail when
using multi-character keyboard macros.
m. Fixed a bug that could cause a core dump when an edited history entry was
re-executed under certain conditions.
n. Fixed a bug that caused readline to reference freed memory when attmpting
to display a portion of the prompt.
3. New Features in Bash
a. Changed the parameter pattern replacement functions to not anchor the
pattern at the beginning of the string if doing global replacement - that
combination doesn't make any sense.
b. When running in `word expansion only' mode (--wordexp option), inhibit
process substitution.
c. Loadable builtins now work on MacOS X 10.[34].
d. Shells running in posix mode no longer set $HOME, as POSIX requires.
e. The code that checks for binary files being executed as shell scripts now
checks only for NUL rather than any non-printing character.
f. Quoting the string argument to the [[ command's =~ operator now forces
string matching, as with the other pattern-matching operators.
4. New Features in Readline
a. Calling applications can now set the keyboard timeout to 0, allowing
poll-like behavior.
b. The value of SYS_INPUTRC (configurable at compilation time) is now used as
the default last-ditch startup file.
c. The history file reading functions now allow windows-like \r\n line
terminators.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.1-release,
and the previous version, bash-3.1-rc2.
1. Changes to Readline
a. Several changes to the multibyte redisplay code to fix problems with
prompts containing invisible characters.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.1-rc2,
and the previous version, bash-3.1-rc1.
1. Changes to Bash
a. Fixed a bug that caused a DEBUG trap to overwrite a command string that's
eventually attached to a background job.
b. Changed some code so that filenames with leading tildes with spaces in the
name aren't tilde-expanded by the bash completion code.
c. Fixed a bug that caused the pushd builtin to fail to change to
directories with leading `-'.
d. Fixed a small memory leak in the programmable completion code.
2. Changes to Readline
a. Fixed a redisplay bug caused by moving the cursor vertically to a line
with invisible characters in the prompt in a multibyte locale.
b. Fixed a bug that could cause the terminal special chars to be bound in the
wrong keymap in vi mode.
3. New Features in Bash
a. If compiled for strict POSIX conformance, LINES and COLUMNS may now
override the true terminal size.
4. New Features in Readline
a. A new external application-controllable variable that allows the LINES
and COLUMNS environment variables to set the window size regardless of
what the kernel returns.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.1-rc1,
and the previous version, bash-3.1-beta1.
1. Changes to Bash
a. Fixed a bug that could cause core dumps due to accessing the current
pipeline while in the middle of modifying it.
b. Fixed a bug that caused pathnames with backslashes still quoting characters
to be passed to opendir().
c. Command word completion now obeys the setting of completion-ignore-case.
d. Fixed a problem with redirection that caused file descriptors greater than
2 to be inappropriately marked as close-on-exec.
e. In Posix mode, after `wait' is called to wait for a particular process
explicitly, that process is removed from the list of processes known to
the shell, and subsequent attempts to wait for it return errors.
f. Fixed a bug that caused extended pattern matching to incorrectly scan
backslash-escaped pattern characters.
g. Fixed a synchronization problem that could cause core dumps when handling
a SIGWINCH.
h. Fixed a bug that caused an unmatched backquote to be accepted without an
error when processing here documents.
i. Fixed a small memory leak in the `cd' builtin.
j. Fix for MacOS X so it gets the values for the HOSTTYPE, MACHTYPE, and
OSTYPE variables at build time, to support universal binaries.
k. Fixed a bug that could cause an exit trap to return the exit status of
the trap command rather than the status as it was before the trap was
run as the shell's exit status.
2. New Features in Bash
3. Changes to Readline
a. Fixed a bug that caused reversing the incremental search direction to
not work correctly.
b. Fixed the vi-mode `U' command to only undo up to the first time insert mode
was entered, as Posix specifies.
c. Fixed a bug in the vi-mode `r' command that left the cursor in the wrong
place.
4. New Features in Readline
a. New application-callable auxiliary function, rl_variable_value, returns
a string corresponding to a readline variable's value.
b. When parsing inputrc files and variable binding commands, the parser
strips trailing whitespace from values assigned to boolean variables
before checking them.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.1-beta1,
and the previous version, bash-3.1-alpha1.
1. Changes to Bash
a. Added some system-specific signal names.
b. Fixed a typo in the ulimit builtin to make `x' the right option to
maniuplate the limit on file locks.
c. Fixed a problem with using += to append to index 0 of an array variable
when not using subscript syntax.
d. A few changes to configure.in to remove calls to obsolete or outdated
macros.
e. Make sure changes to variables bash handles specially (e.g., LC_ALL) are
made when the variable is set in the temporary environment to a command.
f. Make sure changes to variables bash handles specially (e.g., LC_ALL) are
made when the variable is modified using `printf -v'.
g. The export environment is now remade on cygwin when HOME is changed, so
DLLs bash is linked against pick up the new value. This fixes problems
with tilde expansion when linking against and already-installed readline.
h. Small fix to the logic for performing tilde expansion in posix mode, so
expansion on the right-hand side of an assignment statement takes place.
i. Fixed a bug that prevented redirections associated with a shell function
from being executed when in a subshell.
j. Fixed `source' and `.' builtins to not require an executable file when
searching $PATH for a file to source.
k. Fixed a bug that caused incorrect word splitting in a function when IFS
was declared local, then unset.
l. Fixed a problem with the `kill' builtin that prevented sending signals
to a process group under certain circumstances when providing a pid < 0.
m. When in POSIX mode, `pwd' now checks that the value it prints is the same
directory as `.', even when displaying $PWD.
n. Fixed a problem with the `read' builtin when reading a script from standard
input and reading data from the same file.
o. Fixed a problem with the `type' and `command' builtins that caused absolute
pathnames to be displayed incorrectly.
p. Some changes to the `bg' builtin for POSIX conformance.
q. The `fc' builtin now removes the `fc' command that caused it to invoke an
editor on specified history entries from the history entirely, rather than
simply ignoring it.
r. When in POSIX mode, the `v' command in vi editing mode simply invokes vi
on the current command, rather than checking $FCEDIT and $EDITOR.
s. Fixed a small memory leak in the pathname canonicalization code.
t. Fixed a bug that caused the expanded value of a $'...' string to be
incorrectly re-quoted if it occurred within a double-quoted ${...}
parameter expansion.
u. Restored default emacs-mode key binding of M-TAB to dynamic-complete-history.
v. Fixed a bug that caused core dumps when interrupting loops running builtins
on some systems.
w. Make sure that some of the functions bash provides replacements for are
not cpp defines.
x. The code that scans embedded commands for the parser (`...` and $(...)) is
now more aware of embedded comments and their effect on quoted strings.
y. Changed the `-n' option to the `history' builtin to not reset the number of
history lines read in the current session after reading the new lines from
the history file if the history is being appended when it is written to
the file, since the appending takes care of the problem that the adjustment
was intended to solve.
z. Improved the error message displayed when a shell script fails to execute
because the environment and size of command line arguments are too large.
aa. A small fix to make sure that $HISTCMD is evaluated whenever the shell is
saving commands to the history list, not just when HISTSIZE is defined.
2. Changes to Readline
a. The `change-case' command now correctly changes the case of multibyte
characters.
b. Changes to the shared library construction scripts to deal with Windows
DLL naming conventions for Cygwin.
c. Fixed the redisplay code to avoid core dumps resulting from a poorly-timed
SIGWINCH.
d. Fixed the non-incremental search code in vi mode to dispose of any current
undo list when copying a line from the history into the current editing
buffer.
e. The variable assignment code now ignores whitespace at the end of lines
when assigning to boolean variables.
f. The `C-w' binding in incremental search now understands multibyte
characters.
3. New Features in Bash
a. A new configuration option, `--enable-strict-posix-default', which will
build bash to be POSIX conforming by default.
4. New Features in Readline
a. If the rl_completion_query_items is set to a value < 0, readline never
asks the user whether or not to view the possible completions.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.1-alpha1,
and the previous version, bash-3.0-release.
1. Changes to Bash
a. Fixed a bug that caused bash to crash if referencing an unset local array.
b. Fixed a problem that caused tilde expansion to not be performed before
attempting globbing word completion.
c. Fixed an incompatibility so that a first argument to trap that's a valid
signal number will be trated as a signal rather than a command to execute.
d. Fixed ${#word} expansion to correctly compute the length of a string
containing multibyte characters.
e. Fixed a bug that caused bash to not pass the correct flags for signal
disposition to child processes.
f. Fixed a bug that caused `fc -l' to list one too many history entries.
g. Some fixes to `fc' for POSIX conformance.
h. Some fixes to job status display for POSIX conformance.
i. Fixed a bug that caused `command -v' to display output if a command was not
found -- it should be silent.
j. In POSIX mode, `type' and `command -[vV]' do not report non-executable
files, even if the shell will attempt to execute them.
k. Fixed a bug that caused the `==' operator to the [[ command to not attempt
extended pattern matching.
l. Fixed the brace expansion code to handle characters whose value exceeds 128.
m. Fixed `printf' to handle strings with a leading `\0' whose length is
non-zero.
n. Fixed a couple of problems with brace expansion where `${' was handled
incorrectly.
o. Fixed off-by-one error when calculating the upper bound of `offset' when
processing the ${array[@]:offset:length} expansion.
p. System-specific configuration changes for: FreeBSD 5.x, Interix, MacOS X
10.4, Linux 2.4+ kernels, Linux 3.x kernels, Dragonfly BSD, QNX 6.x,
Cygwin
q. Fixed a bug that caused the shell to ignore the status of the rightmost
command in a pipeline when the `pipefail' option was enabled.
r. Fixed a completion bug that caused core dumps when expanding a directory
name.
s. Fixed a bug that prevented `hash -d' from removing commands from the hash
table.
t. Fixed word splitting to avoid really bad quadratic performance when
expanding long lists.
u. Fixed a bug that caused negative offsets in substring expansion to use the
wrong values.
v. Fixed a bug in printf that caused it to not return failure on write errors.
w. Fixed a bug that caused commands in subshells to not be properly timed.
x. The shell parser no longer attempts to parse a compound assignment specially
unless in a position where an assignment statement is acceptable or parsing
arguments to a builtin that accepts assignment statements.
y. Fixed a problem that caused a `case' statement to be added to the history
incorrectly as a single command if the `case word' was on one line and the
`in' on another.
z. Fixed a problem that caused internal shell quoting characters to be
incorrectly quoted with backslashes under some circumstances.
aa. The shell now performs correct word splitting when IFS contains multibyte
characters.
bb. The mail checking code now resets the cached file information if the size
drops to 0, even if the times don't change.
cc. A completed command name that is found in $PATH as well as the name of a
directory in the current directory no longer has a slash appended in certain
circumstances: a single instance found in $PATH when `.' is not in $PATH,
and multiple instances found in $PATH, even when `.' is in $PATH.
dd. Incorporated tilde expansion into the word expansion code rather than as a
separately-called function, fixing some cases where it was performed
inappropriately (e.g., after the second `=' in an assignment statement or
in a double-quoted parameter expansion).
ee. Fixed several bugs encountered when parsing compound assignment statements,
so that compound assignments appearing as arguments to builtins are no
longer double-expanded.
ff. Fixed a bug in the command execution code that caused asynchronous commands
containing command substitutions to not put the terminal in the wrong
process group.
gg. Bash now handles the case where the WCONTINUED flag causes waitpid() to
return -1/EINVAL at runtime as well as configuration time.
hh. Fixed parser to generate an error when the pipeline `argument' to `!' or
`time' is NULL.
ii. The shell now takes a little more care when manipulating file descriptors
greater than 9 with the `exec' builtin.
jj. Fixed a bug that caused variable assignments preceding the `command' builtin
preceding a special builtin to be preserved after the command completed in
POSIX mode.
kk. Fixed a bug that allowed variables beginning with a digit to be created.
ll. Fixed a bug that caused a \<newline> to be removed when parsing a $'...'
construct.
mm. A shell whose name begins with `-' will now be a restricted shell if the
remainder of the name indicates it should be restricted.
nn. Fixed a bug that could cause a core dump if FUNCNAME were changed or unset
during a function's execution.
oo. Fixed a bug that caused executing a `return' in a function to not execute
a RETURN trap. The RETURN trap is inherited by shell functions only if
function tracing is globally enabled or has been enabled for that function.
pp. Fixed cases where var[@] was not handled exactly like var, when var is a
scalar variable.
qq. Fixed a bug that caused the first character after a SIGINT to be discarded
under certain circumstances.
rr. Fixed exit status code so that a suspended job returns 128+signal as its
exit status (preventing commands after it in `&&' lists from being
executed).
ss. Fixed a bug that caused the shell parser state to be changed by executing
a shell function as a result of word completion.
tt. Fixed a long-standing bug that caused '\177' characters in variable
values to be discarded when expanded in double-quoted strings.
uu. Fixed a bug that caused $RANDOM to be re-seeded multiple times in a
subshell environment.
vv. Extensive changes to the job management code to avoid the pid-reuse and
pid-aliasing problems caused by retaining the exit status of too many jobs,
but still retain as many background job statuses as POSIX requires.
ww. Fixed a parser bug in processing \<newline> that caused things like
((echo 5) \
(echo 6))
to not work correctly.
xx. `pwd -P' now sets $PWD to a directory name containing no symbolic links
when in posix mode, as POSIX requires.
yy. In posix mode, bash no longer sets $PWD to a name containing no symbolic
links if a directory is chosen from $CDPATH.
zz. The word splitting code now treats an IFS character that is not space,
tab, or newline and any adjacent IFS white space as a single delimiter, as
SUSv3/XPG6 require.
aaa. The `read' builtin now checks whether or not the number of fields read is
exactly the same as the number of variables instead of just assigning the
rest of the line (minus any trailing IFS white space) to the last
variable. This is what POSIX/SUS/XPG all require.
bbb. Fixed a bug that caused `read' to always check whether or not fd 0 was a
pipe, even when reading from another file descriptor.
ccc. Fixed a bug that caused short-circuiting of execution even if the return
value was being inverted.
ddd. Fixed a bug that caused a core dump while decoding \W escapes in PS1 if
PWD was unset.
eee. Fixed a bug in `read' that counted internal quoting characters for the
purposes of `read -n'.
fff. Fixed a bug so that a function definition in a pipeline causes a child
process to be forked at the right time.
ggg. Bash will not attempt to link against a readline library that doesn't
have rl_gnu_readline_p == 1.
hhh. Fixed a bug that caused `read' to consume one too many characters when
reading a fixed number of characters and the Nth character is a backslash.
iii. Fixed a bug that caused `unset' on variables in the temporary environment
to leave them set when `unset' completed.
jjj. Fixed a bug that caused bash to close fd 2 if an `exec' failed and the
shell didn't exit.
kkk. The completion code is more careful to not turn `/' or `///' into `//',
for those systems on which `//' has special meaning.
lll. Fixed a bug that caused command substitution in asynchronous commands to
close the wrong file descriptors.
mmm. The shell no longer prints status messages about terminated background
processes unless job control is active.
nnn. Fixed a bug that prevented multiple consecutive invocations of `history -s'
from adding all the commands to the history list.
ooo. Added a couple of changes to make arithmetic expansion more consistent in
all its contexts (still not perfect).
ppp. Fixed a bug that caused the parser to occasionally not find the right
terminating "`" in an old-style command substitution.
qqq. Fixed a bug that caused core dumps when the shell was reading its non-
interactive input from fd 0 and fd 0 was duplicated and restored using a
combination of `exec' (to save) and redirection (to restore).
rrr. Fixed a problem that caused loops in sourced scripts to not be cleaned
up properly when a `return' is executed.
sss. Change internal command substitution completion function to append a slash
to directory names in the command.
2. Changes to Readline
a. Fixed a bug that caused multiliine prompts to be wrapped and displayed
incorrectly.
b. Fixed a bug that caused ^P/^N in emacs mode to fail to display the current
line correctly.
c. Fixed a problem in computing the number of invisible characters on the first
line of a prompt whose length exceeds the screen width.
d. Fixed vi-mode searching so that failure preserves the current line rather
than the last line in the history list.
e. Fixed the vi-mode `~' command (change-case) to have the correct behavior at
end-of-line when manipulating multibyte characters.
f. Fixed the vi-mode `r' command (change-char) to have the correct behavior at
end-of-line when manipulating multibyte characters.
g. Fixed multiple bugs in the redisplay of multibyte characters: displaying
prompts longer than the screen width containing multibyte characters,
h. Fix the calculation of the number of physical characters in the prompt
string when it contains multibyte characters.
i. A non-zero value for the `rl_complete_suppress_append' variable now causes
no `/' to be appended to a directory name.
j. Fixed forward-word and backward-word to work when words contained
multibyte characters.
k. Fixed a bug in finding the delimiter of a `?' substring when performing
history expansion in a locale that supports multibyte characters.
l. Fixed a memory leak caused by not freeing the timestamp in a history entry.
m. Fixed a bug that caused "\M-x" style key bindings to not obey the setting
of the `convert-meta' variable.
n. Fixed saving and restoring primary prompt when prompting for incremental
and non-incremental searches; search prompts now display multibyte
characters correctly.
o. Fixed a bug that caused keys originally bound to self-insert but shadowed
by a multi-character key sequence to not be inserted.
p. Fixed code so rl_prep_term_function and rl_deprep_term_function aren't
dereferenced if NULL (matching the documentation).
q. Extensive changes to readline to add enough state so that commands
requiring additional characters (searches, multi-key sequences, numeric
arguments, commands requiring an additional specifier character like
vi-mode change-char, etc.) work without synchronously waiting for
additional input.
r. Lots of changes so readline builds and runs on MinGW.
s. Readline no longer tries to modify the terminal settings when running in
callback mode.
t. The Readline display code no longer sets the location of the last invisible
character in the prompt if the \[\] sequence is empty.
3. New Features in Bash
a. Bash now understands LC_TIME as a special variable so that time display
tracks the current locale.
b. BASH_ARGC, BASH_ARGV, BASH_SOURCE, and BASH_LINENO are no longer created
as `invisible' variables and may not be unset.
c. In POSIX mode, if `xpg_echo' option is enabled, the `echo' builtin doesn't
try to interpret any options at all, as POSIX requires.
d. The `bg' builtin now accepts multiple arguments, as POSIX seems to specify.
e. Fixed vi-mode word completion and glob expansion to perform tilde
expansion.
f. The `**' mathematic exponentiation operator is now right-associative.
g. The `ulimit' builtin has new options: -i (max number of pending signals),
-q (max size of POSIX message queues), and -x (max number of file locks).
h. A bare `%' once again expands to the current job when used as a job
specifier.
i. The `+=' assignment operator (append to the value of a string or array) is
now supported for assignment statements and arguments to builtin commands
that accept assignment statements.
j. BASH_COMMAND now preserves its value when a DEBUG trap is executed.
k. The `gnu_errfmt' option is enabled automatically if the shell is running
in an emacs terminal window.
l. New configuration option: --single-help-strings. Causes long help text
to be written as a single string; intended to ease translation.
m. The COMP_WORDBREAKS variable now causes the list of word break characters
to be emptied when the variable is unset.
n. An unquoted expansion of $* when $IFS is empty now causes the positional
parameters to be concatenated if the expansion doesn't undergo word
splitting.
o. Bash now inherits $_ from the environment if it appears there at startup.
p. New shell option: nocasematch. If non-zero, shell pattern matching ignores
case when used by `case' and `[[' commands.
q. The `printf' builtin takes a new option: -v var. That causes the output
to be placed into var instead of on stdout.
r. By default, the shell no longer reports processes dying from SIGPIPE.
s. Bash now sets the extern variable `environ' to the export environment it
creates, so C library functions that call getenv() (and can't use the
shell-provided replacement) get current values of environment variables.
4. New Features in Readline
a. The key sequence sent by the keypad `delete' key is now automatically
bound to delete-char.
b. A negative argument to menu-complete now cycles backward through the
completion list.
c. A new bindable readline variable: bind-tty-special-chars. If non-zero,
readline will bind the terminal special characters to their readline
equivalents when it's called (on by default).
d. New bindable command: vi-rubout. Saves deleted text for possible
reinsertion, as with any vi-mode `text modification' command; `X' is bound
to this in vi command mode.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.0-release,
and the previous version, bash-3.0-rc1.
1. Changes to Bash
a. Fixed a boundary overrun that could cause segmentation faults when the
completion code hands an incomplete construct to the word expansion
functions.
b. Changed posix mode behavior so that an error in a variable assignment
preceding a special builtin causes a non-interactive shell to exit.
c. Change the directory expansion portion of the completion code to not
expand embedded command substitutions if the directory name appears in
the file system.
d. Fixed a problem that caused `bash -r' to turn on restrictions before
reading the startup files.
e. Fixed a problem with the default operation of the `umask' builtin.
2. Changes to Readline
a. Fixed a problem with readline saving the contents of the current line
before beginning a non-interactive search.
b. Fixed a problem with EOF detection when using rl_event_hook.
c. Fixed a problem with the vi mode `p' and `P' commands ignoring numeric
arguments.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.0-rc1,
and the previous version, bash-3.0-beta1.
1. Changes to Bash
a. Fixed a bug that caused incorrect behavior when referecing element 0 of
an array using $array, element 0 was unset, and `set -u' was enabled.
b. System-specific changes for: SCO Unix 3.2, Tandem.
c. Fixed a bug that caused inappropriate word splitting when a variable was
expanded within a double-quoted string that also included $@.
d. Fixed a bug that caused `pwd' to not display anything in physical mode
when the file system had changed underneath the shell.
e. Fixed a bug in the pre- and post- increment and decrement parsing in the
expression evaluator that caused errors when the operands and corresponding
operators were separated by whitespace.
f. Fixed a bug that caused `history -p' to add an entry to the history list,
counter to the documentation. (Keeps the history expansions invoked by
emacs-mode command line editing from doing that as well.)
g. Fixed a bug that could cause a core dump if `cd' is asked to print out a
pathname longer than PATH_MAX characters.
h. Fixed a bug that caused jobs to be put into the wrong process group under
some circumstances after enabling job control with `set -m'.
i. `unalias' now returns failure if no alias name arguments are supplied.
j. Documented the characters not allowed to appear in an alias name.
k. $* is no longer expanded as if in double quotes when it appears in the
body of a here document, as the SUS seems to require.
l. The `bashbug' script now uses a directory in $TMPDIR for exclusive
access rather than trying to guess how the underlying OS provides for
secure temporary file creation.
m. Fixed a few problems with `cd' and `pwd' when asked to operate on pathnames
longer than PATH_MAX characters.
n. Fixed a memory leak caused when creating multiple local array variables
with identical names.
o. Fixed a problem with calls to getcwd() so that bash now operates better
when the full pathname to the current directory is longer than PATH_MAX
bytes.
p. The `trap' builtin now reports an error if a single non-signal argument
is specified.
q. Fixed a bug that caused `umask' to not work correctly when presented
with a mask of all 0s.
r. When `getopts' reaches the end of options, OPTARG is unset, as POSIX
appears to specify.
s. Interactive mode now depends on whether or not stdin and stderr are
connected to a tty; formerly it was stdin and stdout. POSIX requires
this.
t. Fixed vi-mode completion to work more as POSIX specifies (e.g., doing the
right kind of filename generation).
2. Changes to Readline
a. Fixed a problem that could cause readline to refer to freed memory when
moving between history lines while doing searches.
b. Improvements to the code that expands and displays prompt strings
containing multibyte characters.
c. Fixed a problem with vi-mode not correctly remembering the numeric argument
to the last `c'hange command for later use with `.'.
d. Fixed a bug in vi-mode that caused multi-digit count arguments to work
incorrectly.
e. Fixed a problem in vi-mode that caused the last text modification command
to not be remembered across different command lines.
f. Fixed problems with changing characters and changing case at the end of
the line.
3. New Features in Bash
a. The `jobs', `kill', and `wait' builtins now accept job control notation
even if job control is not enabled.
b. The historical behavior of `trap' that allows a missing `action' argument
to cause each specified signal's handling to be reset to its default is
now only supported when `trap' is given a single non-option argument.
4. New Features in Readline
a. When listing completions, directories have a `/' appended if the
`mark-directories' option has been enabled.
------------------------------------------------------------------------------
This document details the changes between this version, bash-3.0-beta1,
and the previous version, bash-3.0-alpha.
1. Changes to Bash
a. Fixes to build correctly when arrays are not compiled into the shell.
b. Fixed command substitution to run any exit trap defined in the command
substitution before returning; the exit trap is not inherited from the
calling shell.
c. Fixes to process group synchronization code so that every child process