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 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391
|
# History of Yash
## Yash 2.60 (2025-09-15)
- Updated the sample initialization script (yashrc):
- Redefined the `open` function for WSL to use `rundll32.exe`
instead of `cmd.exe` for better stability.
- `$VISUAL` is now preferred over `$EDITOR` for the default value of
`$FCEDIT`.
- [line-editing] The "vi-edit-and-accept" command now honors the
`VISUAL` and `EDITOR` variables, so that you can use your favorite
editor.
- [line-editing] Added completion for `fd`, `dvtm`, `mw`
(mutt-wizard), and `typst`.
- [line-editing] Completion for `man` now supports the `-l`
(`--local-file`) option.
- The `export`, `readonly`, and `typeset` built-ins now print the `--`
separator before the variable names when printing variables whose
names begin with a hyphen (`-`), so that the output can be safely
re-parsed by the shell. The same applies to function names.
- Fixed a bug where the shell continued to export the previous value
of an array even after it was updated using the `array` built-in.
Also fixed an issue where the internal cache was not refreshed for
the `PATH`, `CDPATH`, and `YASH_LOADPATH` variables after being
modified via the `array` built-in.
- Fixed a bug where single quote characters (`'`) in the `word` of
parameter expansions of the forms `${foo+word}`, `${foo-word}`,
`${foo=word}`, and `${foo?word}` were treated as quoting characters
when the expansion was in double quotes.
- Fixed a bug where tilde expansion was performed on the `word` of
parameter expansions of the forms `${foo+word}`, `${foo-word}`,
`${foo=word}`, and `${foo?word}` even when the expansion was in
double quotes.
## Yash 2.59 (2025-05-13)
- Improved POSIX.1-2024 support:
- When an error that would terminate a non-interactive shell occurs
in an interactive shell, the shell now discards any remaining
commands that were typed but not yet executed, and immediately
continues to read the next command. Parameter expansion errors and
variable assignment errors are examples of such errors.
- When a foreground job suspends in an interactive shell, the shell
now discards any remaining commands that were typed but not yet
executed, and immediately continues to read the next command.
- The shell now considers a job to be suspended when any child
process suspends in a pipeline, instead of when all child
processes suspend.
- Patterns no longer expand to the filename `.` or `..` in pathname
expansion.
- When the `exit` built-in is used without an operand in a trap
action, the shell now exits with the exit status of the last
command executed before the trap action, instead of the exit
status of the last command executed in the trap action.
- The `read` built-in now returns a more specific exit status
depending on the cause of the error.
- The `read` built-in now supports the `-d` option, which can be
used to specify a delimiter character.
- The `readonly` built-in now refuses to make the `$LINENO`,
`$OLDPWD`, `$OPTARG`, `$OPTIND`, and `$PWD` variables read-only in
the POSIXly-correct mode.
- The `test` (`[`) built-in no longer accepts binary operators `-a`
and `-o` and parentheses `(` and `)` in the POSIXly-correct mode.
- The `trap` built-in now supports the `-p` option in the POSIXly-
correct mode. When the `-p` option is used, the built-in prints
all traps without filtering out traps that are not set.
- The `trap` built-in now also reports signals that are ignored
because the program that invoked the shell has set the signal
to be ignored.
- The `wait` built-in no longer returns when the target process is
suspended if job-control is on. The built-in now waits for the
target process to exit or be terminated by a signal regardless
of mode.
- The `true`, `false`, and `pwd` built-ins are now substitutive
built-ins.
- The `cd` built-in now exits with status code 5, when an empty
operand is supplied.
- The `cd` built-in now returns exit status 1 if the `$PWD` or
`$OLDPWD` variable cannot be updated because it is read-only.
- The interactive shell now errors out if pathname expansion applied
to a file redirection operand results in more than one pathname,
regardless of whether the POSIXly-correct mode is enabled.
- The shell now becomes interactive if the shell is reading commands
from the standard input and the standard input and standard error
are both connected to a terminal. Previously, the shell became
interactive only if there was no command line operand as well.
- Job control can now be enabled even if the shell does not have a
controlling terminal.
- If the job-control shell is started in the same process group as
the session leader, the shell now forces the process group to be
in the foreground, rather than suspending the shell itself until
brought to the foreground by some other means.
- The shell now returns exit status 128 when encountering a command
read error.
- When the shell is exiting with an exit status that indicates that
that the last command was terminated by a signal, the shell now
terminates with the same signal to propagate the command's
termination status.
- When an interactive shell starts an asynchronous command, its job
number and process ID are now printed to the standard error.
- The `printf` built-in now treats as an error a numeric operand
that starts with a quote followed by more than one character.
For example, `printf '%d' '"ab'` used to silently ignore the
character `b`, but now it is treated as an error.
- When a field is made up of a single tilde expansion that expands
to an empty string, the field is no longer removed from the
command line words.
- When a tilde expansion produces a directory name that ends with a
slash and the expansion is followed by a slash, the trailing slash
in the directory name is now removed to maintain the correct
number of slashes.
- The syntax for specifying a file descriptor with a variable name in
braces before a redirection operator is now reserved for future
implementation. The syntax is now treated as a syntax error.
- [line-editing] Updated the completion scripts to support Git
2.48.1.
- [line-editing] Added completion for `git-mv`, `bmake`, `gmake`,
`fnf`, `cmus`, `cmus-remote`, and `catgirl`.
- [line-editing] Completion for `cd` and `pushd` no longer incorrectly
performs pathname expansion on the directory names listed in
`$CDPATH` before searching for candidate directories.
- Fixed a possible crash when the `read` built-in reads input in an
interactive shell.
- Subshells created for executing a process redirection in a job-
control shell now ignore the `SIGTSTP` signal.
- Added a workaround for an apparent bug in glibc's fsetpos function
that prevents the shell from updating the history file.
- Previously, you could enable job control in a subshell by setting
the `-m` option inside the subshell. This undocumented behavior has
been removed.
## Yash 2.58.1 (2025-02-04)
- Updated the sample initialization script (yashrc):
- Version 2.58 changed the default `$HISTFILE` location to
`${XDG_STATE_HOME}/yash/history`, but the initialization script
was not making the containing directory. This was causing the
shell to fail to save the history file. The initialization script
now creates the directory if it does not exist.
- [line-editing] Version 2.58 added completion for fzy, but the NEWS
file did not mention it. This has been fixed.
- Fixed a test case in `tests/job-y.tst` that was failing when run as
root.
## Yash 2.58 (2025-02-02)
- The location of the initialization files can now be configured
using the `XDG_CONFIG_HOME` variable (except in POSIXly-correct
mode).
- [line-editing] Command line prediction now works in the vi command
mode.
- [line-editing] Added completion for fzy and git-restore.
- [line-editing] Added completion for git-merge's --continue option.
- [line-editing] The completion for the `.` built-in now suggests
directory names for the first operand even before the user enters a
slash.
- Improved POSIX.1-2024 support:
- Case command items now can be terminated by `;&` instead of `;;'
to force the shell to execute the next item.
- The non-standard terminators `;|` and `;;&` are also supported
to resume pattern matching with the next item unless in the
POSIXly-correct mode.
- Dollar-single-quotes are now supported.
- Declaration utility semantics is now supported. Assignment-like
arguments to the `export`, `local`, `readonly`, and `typeset`
built-ins are now expanded in the same way as assignments are
expanded.
- The `printf` built-in now supports position specifiers in format
strings as in `printf '%2$s %1$s\n' foo bar`.
- The `cd` and `pushd` built-ins now support the `-e` option, which
can be used to see if the `$PWD` variable is successfully updated.
- The exit status of the `getopts` built-in is now 2 on any error.
- After the `bg` built-in resumed a job, the `!` special parameter
expands to the process ID of the job.
- An interactive shell no longer exits on an error in the `exec`
built-in, even if the POSIXly-correct mode is on.
- The shell's syntax now always allows `esac` as the first pattern
of a case branch as in `case esac in (esac|case) echo ok; esac`.
Previously, it was a syntax error in the POSIXly-correct mode.
- The exit statuses returned from the `cd`, `pushd`, and `popd`
built-ins have been updated to make it easier to distinguish the
reasons for failure.
- Fixed a potential crash caused by an expansion error in nested
parameter expansion.
- Updated the sample initialization script (yashrc):
- The default `$HISTFILE` is now set to
`${XDG_STATE_HOME}/yash/history` unless `${HOME}/.yash_history`
exists, in which case the latter is used and a warning is
printed. To suppress the warning and keep using the previous
location, you can set the `$HISTFILE` variable before the sample
initialization script is sourced.
- Added aliases h='fc -l' and j='jobs'.
- Added the wrapper function for `doas` in an attempt to remove the
misleading terminal title.
## Yash 2.57 (2024-08-04)
- Added support for the "$POST_PROMPT_COMMAND" variable, whose value
is executed after reading a command line in the interactive shell.
- If the shell exits because of a shell error during the EXIT trap,
the shell now returns the exit status of the error rather than that
of the last command before the EXIT trap.
- [line-editing] Fixed the spurious error message printed when
completing after `git config alias.` with the nounset shell option
enabled.
- [line-editing] Completion no longer inserts a redundant backslash
to escape a character included in the completed word
when the cursor follows another backslash.
- Updated the sample initialization script (yashrc):
- Added setup for VS Code shell integration.
## Yash 2.56.1 (2024-03-20)
- The shell can now open more file descriptors on Cygwin.
- Fixed the bug where the "typeset -fp" built-in prints parameter
expansions of the form `${foo:/bar/baz}` with a redundant `#` flag
like `${foo:/#bar/baz}`.
- Fixed the bug where the `emacs-capitalize-word` line-editing
command misbehaves and possibly crashes the shell if there is no
word following the cursor to be capitalized.
- Added the `emacs-search-forward-current` and
`emacs-search-backward-current` line-editing commands.
- [line-editing] Added the completion script for `doas`.
======================================================================
Legend:
+: new feature
-: removed feature
=: specification change
*: bug fix
x: new bug
----------------------------------------------------------------------
Yash 2.55 (2023-08-20)
+ [line-editing] The Enter/Send key ("\et") now has a default
binding to the command the Ctrl-M key ("\^M") is bound to in each
mode.
= [line-editing] The redraw-all and clear-and-redraw-all commands
now can be used with an argument to swap their behavior.
* Fixed mistranslation in the Japanese language support.
. Updated the sample initialization script (yashrc):
+ Code example for binding Ctrl-L to clear-and-redraw-all.
. Updated completion scripts:
+ Completion for git-switch and pass
----------------------------------------------------------------------
Yash 2.54 (2023-02-25)
+ Changing font style of command line predictions with $PS1P, etc.
+ The '--le-trim-right' option.
= When the POSIXly-correct mode is active, the shell now refuses to
execute built-ins POSIX XCU 2.9.1 lists as utilities that cause
unspecified results. To implement the new behavior, the previous
"semi-special" built-ins are now categorized in either of the new
categories "mandatory" and "elective". The "command" and "type"
built-ins now report the new categories of such built-ins.
= The shell now requires a corresponding external executable to
exist in $PATH when running a built-in that works like a standard
external utility even when the POSIXly-correct mode is inactive.
Such built-ins are now categorized as "substitutive" built-ins.
= The "array" built-in is now completely ignored in the POSIXly-
correct mode. The built-in, formerly a regular built-in, is now
categorized as an "extension" built-in.
= The xtrace option is now ignored while expanding the $PS4
variable to prevent possible infinite recursion.
* The allexport option was wrongly ignored in many assignment
contexts.
* The errexit and errreturn options now work for assignment error
in a for loop.
* The ">" redirection with the noclobber option no longer hangs
when the operand names a symbolic link to a non-existing file.
* The exported value of the $DIRSTACK variable was not being
updated correctly in the "pushd" and "popd" built-ins.
* The effect of "!" no longer applies to the exit status of the
"break", "continue", and "return" built-ins.
* An alias value ending with a blank followed by a line
continuation no longer subjects the next token to alias
substitution.
. Updated the sample initialization script (yashrc):
+ The "o" alias for WSL
----------------------------------------------------------------------
Yash 2.53 (2022-08-23)
= The shell now deterministically rejects arithmetic expansions
that result in undefined behavior.
* A non-interactive yash now exits on an assignment error in a for
loop.
* Fixed a bug where command substitutions contained in the regular
expression inside the "[[ word =~ regex ]]" syntax were not
parsed correctly.
* Fixed a bug where unclosed quotes in an end-of-here-document
indicator were causing the shell to crash or misbehave.
* Fixed a bug where yash crashes when invoked with no argv.
----------------------------------------------------------------------
Yash 2.52 (2021-10-11)
= Unquoted multiple empty fields resulting from a single word
expansion are now removed. For example, the brace expansion {,}
now expands to no fields rather than two empty fields.
* In word expansion, if a field consists of a single non-whitespace
IFS character, it results in an empty field rather than no field.
* "typeset -fp" now correctly distinguishes "<<-FOO" and "<< -FOO".
* Fixed possible memory leak caused by improper use of the realloc
function.
. Updated completion scripts:
* git: Fixed completion of arguments in a command line containing
argument-taking options such as "-C".
----------------------------------------------------------------------
Yash 2.51 (2020-12-12)
= When an expansion error occurs, the shell now immediately stops
expansion rather than trying to expand the remaining part of the
word.
= When there are no positional parameters, "$@""$@" now expands to
nothing rather than one empty field, as defined in POSIX.
= Quote removal in arithmetic expansion has been modified to match
the behavior defined in POSIX. It no longer allows things like
$(("2" + \5)).
= The quotation rules for the substitution word in a parameter
expansion inside double-quotes have been changed to match with
the behavior of other existing shells. For example, "${x-\a'b'}"
now expands to \a'b' rather than ab.
= When there is no command word in a simple command, redirections
are now performed in a subshell after assignments are performed.
= The standard input of asynchronous commands in a non-job-control
shell is now always implicitly redirected to /dev/null,
regardless of whether the standard input has already been
redirected.
= Quoted characters are now handled in (almost) the same way as
Bash in the regular expression in the "[[ word =~ regex ]]"
syntax.
* The "command" built-in with the -v or -V option was printing
the pathnames of external commands with a redundant leading slash
when the current working directory is "/" or "//".
* Redirections on a subshell command are now evaluated in the
current shell rather than in the subshell.
* When an EXIT trap is executed in a subshell with a redirection,
the redirection was incorrectly not being applied to the trap.
* When job control is off, the "trap" built-in was failing to set
a new trap for SIGINT and SIGQUIT in an asynchronous command.
* When job control is off, SIGINT and SIGQUIT were not being
ignored if a trap had been set for the signal the main shell
process.
* In pattern matching, when an unescaped backslash results from an
expansion in the pattern, it is now treated as an escape
character.
* When there are no positional parameters, the nested expansion
"${{@}}" now expands to nothing rather than one empty field.
* Unquoted parentheses and vertical bars now can be used in the
regular expression in the "[[ word =~ regex ]]" syntax.
----------------------------------------------------------------------
Yash 2.50 (2020-05-31)
* With the "-o notify" option enabled, the "fg" built-in was
redundantly reporting the status of the job that had been resumed
and exited.
* Line-editing no longer hangs when the terminfo database maps a
key to an empty string.
* When $LINENO is exported, external commands now receive the
correct value of the variable.
. Updated the sample initialization script (yashrc):
+ A wrapper function for the "crontab" command is now installed
to prevent accidental removal by "crontab -r" where the user
intends "crontab -e".
. Updated completion scripts:
+ git-rebase: support new options in Git 2.24.0.
----------------------------------------------------------------------
Yash 2.49 (2019-09-22)
+ '--for-local' option.
= The '--no-unset' option now rejects unset variables not only in
parameter expansion but also in arithmetic expansion.
* Expansion of ""$*, ""$@, $*"", and $@"" now correctly yields an
empty string rather than nothing when there are no positional
parameters.
* The $RANDOM variable was expanding to a value larger than 32767
on some systems.
* The "\e" escape sequence was not working in the "echo" built-in.
* When a last command is a subshell, the parent shell's jobs were
not being cleared when entering the subshell.
* The job status was not being updated correctly if a process ID
was reused by another process before the previous process was
removed from the job list.
* The "typeset" built-in now prints functions that contain a simple
command whose command name is a keyword in a format that can
successfully re-parsed by the shell.
. Updated completion scripts:
* Remote branch names are now correctly completed for the
argument to Git remote/fetch/pull/push commands.
* Local pathname operands are now correctly completed for the
rsync command.
----------------------------------------------------------------------
Yash 2.48 (2018-12-22)
+ The double-bracket command (the [[ ... ]] syntax)
+ The "local" built-in
+ The '--le-predict-empty' option
+ The prompt string now can be defined with the $YASH_PS...
variables.
= Command line prediction no longer shows suggestion before you
start typing a command. Use the new '--le-predict-empty' option
to restore the previous behavior.
= The default value of $PS1 has been changed.
* The line number is now correctly counted in arithmetic
expansions that contain newlines.
* Subshells in the EXIT trap were unexpectedly exiting with the
exit status of the last command executed before the EXIT trap on
the main shell.
* A new EXIT trap that was set in a subshell in the EXIT trap was
unexpectedly being ignored.
* The "typeset" built-in was crashing when printing a function that
contains a here-document that contains a command substitution
that contains more than one command.
* The "typeset" built-in was forgetting to print here-document
contents when printing a function that contains a process
substitution (or redirection) that contains here-documents.
* The variable name token in the for command and the word following
a here-document redirection operator are now correctly parsed
even when it resulted from an alias substitution whose value
begins with a blank.
* The "do" keyword in a for loop is no longer subject to alias
substitution.
* An invalid semicolon that appears at the beginning of a line as a
result of alias substitution in a for loop is now correctly
rejected.
. For more strict POSIXly-correctness, some syntactic constructions
are now regarded as an error in the POSIXly-correct mode:
* An IO_NUMBER token cannot be the operand of a redirection.
* Keywords immediately following a redirection are not
recognized.
. Updated the sample initialization script (yashrc):
= The prompt strings are now defined with the $YASH_PS...
variables.
* Window title update should now work on more terminals.
* Any predefined handlers for SIGTSTP, SIGTTIN, and SIGTTOU are
now cancelled so that jobs can be suspended properly.
. Updated completion scripts:
* git: pathnames are now correctly completed with the latest Git.
+ git-grep: support new options in Git 2.19.1.
+ git-stash: support new options in Git 2.18.0.
+ ping: support some common options
= ssh, ssh-keygen: support new options in OpenSSH 7.7.
----------------------------------------------------------------------
Yash 2.47 (2018-04-11)
+ '--errreturn' option.
= Expansion results printed by the -x option is now quoted to
disambiguate presence of special characters.
= When the shell prints aliases, variables, key bindings, etc. they
are now printed with less quotes.
* The "set" built-in without any argument now prints not only local
variables but also global.
* The "." built-in no longer leaves temporary positional parameters
after a file-not-found error.
* The ">" redirection with the noclobber option is now more
reliable than before. Previously, there was little possibility of
overwriting an existing regular file in case another process
simultaneously replaces the file.
. Updated the sample initialization script (yashrc):
+ Example code for enabling "direnv".
----------------------------------------------------------------------
Yash 2.46 (2017-10-28)
= Global aliases are now substituted in all locations, including
part of compound commands where only operators are syntactically
acceptable.
* The shell now reads and executes all shell commands line by line.
Previously, commands that are not from a file or the standard
input were parsed all at once before being executed.
* After alias substitution where the alias value ends with a blank,
the next word is also subject to alias substitution, but
previously this substitution was being applied only once, which
was a different behavior from many other shells.
* After alias substitution where the alias value ends with a blank,
global aliases were being applied twice, which is now just once.
* Line continuations no longer prevent recursive alias
substitution.
----------------------------------------------------------------------
Yash 2.45 (2017-07-05)
+ [line-editing] new line-editing commands:
complete-max-then-list, complete-max-then-next-candidate,
complete-max-then-prev-candidate
= In prompt strings $PS1 and $PS2, the job count printed by the \j
notation included finished jobs that have not yet waited for.
That was confusing, so the job count no longer includes finished
jobs that have once had its "Done" status reported to the user.
= The "jobs" built-in, with the -n option, no longer clears
finished jobs that are not being reported.
* In arithmetic expansion, unset variables now successfully expand
to a value of "0".
* With the "-o notify" option, job status change was not being
printed until the shell receives a SIGCHLD.
. Updated the default initialization script (yashrc):
+ Confirm before clearing the whole history by "history -c'.
. Updated completion scripts:
+ carthage: --cache-builds option
* git: at most 10 candidates are now proposed for a commit hash.
----------------------------------------------------------------------
Yash 2.44 (2017-01-17)
+ Command line prediction and the '--le-predict' option.
+ A default initialization script is automatically loaded if the
~/.yashrc file cannot be loaded.
= During shell startup, $YASH_LOADPATH is now initialized only if
not set in the environment.
* Updated completion script for: carthage, git, git-log,
git-revert, git-submodule, ssh
* The "return" built-in was wrongly refusing to return from a
script sourced by the "." built-in in an interactive shell.
* In the "test" built-in, the unary "-o" operator was returning the
wrong answer if the given option name was negated with the "no"
prefix (e.g. "test -o noclobber").
* The "wait" built-in now returns an exit status of 1 if any
operand is invalid, ignoring results for any other operands.
* In a for loop without the "in" keyword, a semicolon that delimits
the variable name, if any, now must appear on the same line as
the variable name.
= Support for POSIX.1-2008 Technical Corrigendum 2 (2016).
This affects the shell's behavior only in the POSIXly-correct
mode unless marked with (*) in the following:
. In a pipeline, the reserved word "!" must now be delimited by
a white space when followed by a parenthesis "(".
. In a for loop without the "in" keyword, the variable name and
the "do" keyword can now be separated by a semicolon.
. Variables that are assigned in a simple command whose command
is a function no longer persist after the function finishes.
. The standard input of an asynchronous command is now implicitly
redirected to /dev/null when job control is off. Previously,
this was done when the shell was interactive in the POSIXly-
correct mode.
. The SIGINT and SIGQUIT signals on an asynchronous command are
now ignored only when job control is off.
. The "bindkey", "complete", "dirs", "disown", "hash", "help",
"history", "popd", "pushd", "suspend", "type", "typeset", and
"ulimit" built-ins are now semi-special built-ins.
. The "break" and "continue" built-ins now interrupt lexically
enclosing loops only. (*)
. Unquoted $* and $@ now expand to separate positional
parameters, even if $IFS is an empty string. (*)
. On an assignment error, a non-interactive shell now always
exits, regardless of command type. (*)
. When any error occurs in a special built-in in non-interactive
shell, the shell now exits, regardless of error type.
----------------------------------------------------------------------
Yash 2.43 (2016-09-22)
* Updated completion script for: carthage, cd, su
----------------------------------------------------------------------
Yash 2.42 (2016-08-27)
+ '--pipefail' option.
+ New completion script for: carthage, dnf, git-rev-parse, tree,
watch
+ Updated completion script for: cd, git, git-bisect, git-rev-list
(Git 2.9.2).
= Yash now supports the 2013 edition of POSIX.1-2008.
= Unclosed here-documents are now always rejected.
= A job-control shell now ignores SIGTTIN and SIGTTOU by default.
= Line-editing can now be interrupted by SIGINT.
= The "-o errexit" option is now applied to redirection errors on
compound commands and expansion errors in the for and case
commands.
* In backquoted command substitutions that occur in double quotes,
backslashes that escape a double quote are now handled before the
containing command is parsed.
----------------------------------------------------------------------
Yash 2.41 (2016-03-20)
+ '--emptylastfield' option.
+ New option for the "shift" built-in: -A
+ The "shift" built-in now accepts negative counts.
+ New completion script for: git-notes, git-reflog, git-worktree
= The non-interactive shell now exits on an assignment error
in a simple command without a command name.
= The exit status is now non-zero when a for loop has been
interrupted because of an read-only variable.
= When there is no positional parameter, the word """$@" is now
expanded to an empty word, producing the same result as "$@""".
= The behavior of field splitting has been modified to match the
intended interpretation of POSIX: If field splitting yields more
than one field and the last field is empty, the last field is now
removed.
= The "read" built-in now removes leading whitespaces when
assigning the last input value to the variable.
= The first character of $IFS is now always used as a separator
when concatenating positional parameters. Previously, $IFS was
ignored in some corner cases.
* Unclosed process redirections are now detected as syntax error.
* When $ECHO_STYLE was GNU or ZSH, the "echo" built-in was
incorrectly ignoring single hyphen operands.
* The "typeset" built-in was crashing when used with a temporary
assignment to a variable not specified in the built-in operands.
* In the "typeset" built-in, the -r option was not effective when
printing functions.
* The "typeset" built-in now detects combination of the -f and -g
options as an error.
* The "fg" and "bg" built-ins no longer try to resume a non-job-
controlled job when given no operand.
* In range brace expansion, integers were not always parsed
correctly.
* The "fc" built-in was not handling the history range correctly
when the range was specified with an unused entry number.
* The "fc" built-in was incorrectly rejecting the syntax of the
form "fc -s foo=bar n".
* The interactive shell was unexpectedly forgetting the exit status
of background jobs when reporting the job status.
* Fixed potential undefined behavior during reading a history file.
* Parameter expansions of the form ${foo/bar/baz} are now rejected
in the POSIXly-correct mode, as documented in the manual.
* Single- or double-quoted empty words were incorrectly being
removed in field splitting.
* Backslash escapes are now recognized in parameter indexes.
----------------------------------------------------------------------
Yash 2.40 (2016-01-09)
= The "unset" built-in no longer rejects variable names containing
the "=" symbol as an error. They are now silently ignored.
= In the POSIXly-correct mode, unclosed here-documents are now
treated as an error.
* Fixed possible arithmetic overflow errors in memory allocation
which might result in an undefined behavior.
* Fixed crash on assigning a floating-point number in arithmetic
expansion.
* Fixed memory leak on finding a command in a relative path from
$PATH.
* The parameter expansion ${foo##bar*} was being treated like
${foo##bar} where the asterisk should match up to the end of the
parameter value.
* The parameter expansion ${foo%%*} was being expanded to ${foo}
where it should expand to an empty string.
* The "getopts" built-in no longer rejects digits as option
characters.
* The non-interactive shell no longer exits when the "command"
built-in executes the "." built-in and the script is not found.
* Fixed incorrect exit status of simple commands where command
substitution is performed during command word expansion which
yields no command line words.
* The "exec" built-in now correctly exits with an exit status of
127 for a script file not found.
* Pipes were not being connected as expected during command word
expansion.
* The "fg" and "bg" built-ins now report an error when they fail to
print the job name.
----------------------------------------------------------------------
Yash 2.39 (2015-08-27)
+ New options for the "read" built-in: -e, -P, -p
+ New completion script for: passwd, valgrind
- The configuration option '--disable-alias' has been dropped.
= The "read" built-in now requires the -e (--line-editing) option
to enable line-editing.
= The behavior of the "trap" built-in now conforms to POSIX.1-2013.
The built-in prints the traps for the calling shell rather than
the subshell when it is executed in a command substitution.
= The manual for the "return" built-in has been clarified as to
what the built-in can return from. The behavior of the built-in
has been modified accordingly. It no longer interrupts the "eval"
and "fc" built-ins.
* Crash on division by zero with the "/=" or "%=" operator
in arithmetic expansion.
* Crash in the "complete" built-in called without the -D option.
* Yash no longer tries to find the profile and rcfile scripts in
the root directory when $HOME is not set.
* The "read" built-in with a single operand was failing to trim
initial IFS whitespaces in field splitting.
* The "read" built-in was not handling backslashes correctly in
field splitting if $IFS contained a backslash.
* The "-o allexport" option was being ignored when an array is
assigned by the "read" built-in with the -A option.
* Traps are no longer handled while waiting for input with line-
editing in the "read" built-in.
* Operands to the "set" built-in are now correctly completed.
* Minor fix in completion script for "git-svn".
----------------------------------------------------------------------
Yash 2.38 (2015-06-21)
+ New completion scripts for: git-rm
= In the POSIXly-correct mode, functions must now be defined with a
portable name.
* Backslashes following IFS characters were wrongly being dropped
in field splitting.
* In the POSIXly-correct mode, non-portable variable names are no
longer allowed in for loops.
* Completion error on words following a tilde expansion.
* Completion error on moved or copied tracked files for git-add and
git-commit.
* Completion error on untracked file for git-commit.
----------------------------------------------------------------------
Yash 2.37 (2015-01-25)
+ Updated completion scripts for:
git-checkout (Git 2.1.2), git-push (Git 2.0.1), git-submodule
(Git 2.1.2).
----------------------------------------------------------------------
Yash 2.36 (2014-04-06)
+ New completion scripts for: git-describe, tig.
+ Updated completion script for: git-branch (Git 1.9.0).
----------------------------------------------------------------------
Yash 2.35 (2013-06-08)
+ '--traceall' option.
+ New completion scripts for:
git-clean, git-grep, git-ls-remote, git-submodule,
git-whatchanged
+ Updated completion scripts for:
git-cherry-pick, git-rebase (Git 1.8.1.4),
ssh, ssh-add, ssh-keygen (OpenSSH 6.2)
= The condition for exiting the shell when the -e option is enabled
has been changed in accordance with the 2013 edition of
POSIX.1-2008.
= The "++" and "--" operators are no longer supported in the
POSIXly-correct mode.
= The $RANDOM variable now always returns random numbers, ignoring
the value from the environment variable, if any.
= If yash encounters a too long line that cannot be handled while
reading a history file, it now tries to keep reading the rest of
the file rather than stopping reading.
= Very long command lines are no longer saved in the history file.
* Minor fix in a syntax error message.
* Minor fix in completion script for "git", "ssh" and "rsync".
----------------------------------------------------------------------
Yash 2.34 (2013-02-23)
+ New "test" built-in operator: =~, -o (unary)
+ New completion scripts for:
configure, git-name-rev, git-request-pull, make, rsync
= A syntax error or expansion error in .yash_profile or .yashrc
no longer makes the shell exit even when the shell is not
interactive.
= In line-editing, overwritten characters are now restored when you
hit the backspace key.
= In line-editing, the undo history is no longer saved for each
backspace.
* Fixes in completion scripts for "git".
----------------------------------------------------------------------
Yash 2.33 (2012-10-27)
= The "help" built-in now prints brief usage of built-ins.
= Some error messages for command syntax error have been revised.
= Some built-ins now check command syntax more strictly.
* The "set" built-in aborts the shell on a command syntax error
as specified in POSIX.
----------------------------------------------------------------------
Yash 2.32 (2012-09-22)
+ Man page and HTML manual in English and Japanese.
= The "help" built-in now prints part of the man page.
* Fixes in completion scripts for "git".
----------------------------------------------------------------------
Yash 2.31 (2012-06-24)
+ Completion of directory stack indices in extended tilde
expansion.
+ New option for the "complete" built-in: --dirstack-index
+ Completion for "svn" version 1.7.
* Fixes in "git", "tar" and "su" completion scripts.
----------------------------------------------------------------------
Yash 2.30 (2012-02-04)
* Fixed pathname completion for redirections.
+ New completion scripts for:
svn, git, gitg, gitk, and gitx.
* Minor fixes in completion scripts.
----------------------------------------------------------------------
Yash 2.29 (2011-10-15)
+ An alias value now can contain newlines.
* Fixed invalid memory access on printing an empty array using the
"typeset" built-in.
* The function body is now correctly executed in a subshell when
the body is defined using the (...) compound command.
* In line-editing, the undo command can now be applied only to the
history entry that is being edited.
----------------------------------------------------------------------
Yash 2.28 (2011-08-20)
= In an interactive shell, mail check is now done before job status
report.
* Fixed arithmetic expansion evaluating some expressions that
should not be evaluated.
* Fixed the "array" built-in removing the wrong elements when
positive and negative indices are intermixed with the -d option.
* Fixed the EXIT trap being wrongly executed after a command-not-
found error.
* The EXIT trap is now executed with the correct redirection when
the last command had redirection.
* The "exec" built-in now correctly exports arrays that are just
assigned.
* ${#@} is now correctly expanded to an array of integers that
represent the lengths of array elements.
* Fixed infinite loop in sequential brace expansion.
* Fixed configuration file parsing in completion of the "ssh"
command.
* The "-T" option of the "ln" and "mv" commands now can be
completed.
* The EXIT trap now can be completed.
----------------------------------------------------------------------
Yash 2.27 (2011-05-16)
* Minor bug fixes.
+ New completion scripts for:
awk, chsh, gawk, nawk, pgawk, scp, sftp, ssh-add, ssh-agent,
ssh-keygen, su, sudo, sudoedit, and useradd.
* Fix in completion scripts for the "set" and "tar" commands.
----------------------------------------------------------------------
Yash 2.26 (2011-02-17)
+ New option for the "return" built-in: -n (--no-return)
= Error messages have been revised.
= Shell option names have been generalized: Option names are now
case-insensitive. Non-alphanumeric characters are ignored in
option names. Options can be inverted by prefixing "no" to
their names.
= "case foo in (esac) bar; esac" is now rejected in the POSIXly
correct mode.
= The "-o noexec" option is now ignored in an interactive shell.
= New mail notification is now printed only when the mailbox file
is not empty.
= "printf %c ''" now prints nothing as "printf %c" do.
= In an invocation of the "complete" built-in with the -A or -R
option, the pattern is now matched against the last component of
the pathname when generating pathname candidates with the -f
option.
* Function names containing an '=' sign can now be specified as
arguments to the typeset and unset built-ins (with the -f
option).
* Fixed the exit status of iterative execution that was interrupted
by SIGINT.
+ New completion scripts for:
bsdtar, eview, evim, gex, gnutar, gtar, return, rgview, rgvim,
rview, rvim, slogin, ssh, tar, and which.
* Many fixes in completion scripts for:
bash, chmod, dash, less, mksh, set, sh, and umask.
----------------------------------------------------------------------
Yash 2.25 (2010-11-21)
= In the completion candidate list, options are now sorted case-
insensitively.
= While executing a completion function, the $IFS is reset to the
default value.
+ New completion scripts for:
bash, csplit, dash, diff, ed, egrep, env, ex, expand, fgrep,
file, find, fold, getconf, grep, gview, gvim, gvimdiff, head,
iconv, id, join, ksh, less, ln, locale, man, mesg, mkdir, mkfifo,
mksh, more, mv, newgrp, nice, nl, nohup, od, paste, patch,
pathchk, pr, ps, renice, rm, rmdir, sed, sh, sort, split, stty,
tail, tee, time, touch, tr, uname, uniq, vi, view, vim, vimdiff,
wc, who, xargs, and yash.
* Many fixes in completion scripts for:
cat, cd, chgrp, chmod, chown, cmp, comm, cp, crontab, cut, date,
df, du, exec, ls, and set.
----------------------------------------------------------------------
Yash 2.24 (2010-10-03)
+ New option for the "." built-in: -L
+ New options for the "command" built-in: -a, -f, -k
- Removed the -B option for the "command" built-in.
= Fixed configuration process so that the shell can handle all
kinds of signals on FreeBSD.
= [line-editing] New command completion mechanism. The "complete"
built-in now has new syntax and semantics. Completion settings
are now autoloaded from $YASH_LOADPATH.
+ New completion scripts for:
basename, bg, cat, chgrp, chmod, chown, cmp, comm, command, cp,
crontab, cut, date, df, du, export, popd, pushd, readonly, type,
".", and "[".
= Revised completion scripts for:
alias, array, bindkey, break, cd, complete, continue, dirs,
disown, echo, eval, exec, exit, fc, fg, getopts, hash, help,
history, jobs, kill, ls, printf, pwd, read, set, suspend, test,
trap, typeset, ulimit, umask, unalias, unset, and wait.
- Removed completion script for the "return" built-in.
= Short options now come before long options in a completion
candidate list.
* Symbolic links to non-existent files can now be completed.
* Other fixes in command completion.
* Fixed invalid memory access on parameter expansion failure in
redirection.
----------------------------------------------------------------------
Yash 2.23 (2010-07-29)
* Traps are no longer handled during completion to avoid messing up
the display.
* Fixed invalid memory access during completion. When the notify
option is enabled, the shell was wrongly trying to notify the job
status while executing a candidate generator function.
* The "-o verbose" option is now disabled during completion to
suppress the auto-loaded script being printed.
* Fixed completion script for the "kill" built-in.
----------------------------------------------------------------------
Yash 2.22 (2010-07-25)
+ New "test" built-in operators: -G, -O, -N
+ Completion settings are now autoloaded from $YASH_COMPPATH.
+ New completion scripts for:
alias, array, bindkey, break, cd, complete, continue, dirs,
disown, echo, eval, exec, exit, fc, fg, getopts, hash, help,
history, jobs, kill, ls, printf, pwd, read, return, set, suspend,
test, trap, typeset, ulimit, umask, unalias, unset, and wait.
* Fix a bug that was causing a signal received by a just-created
subshell to be wrongly ignored.
* Other bug fixes
----------------------------------------------------------------------
Yash 2.21 (2010-06-18)
+ Command line completion
= In an interactive shell, the value of $LINENO is now reset to 1
every time a command is input and executed.
* The "function" keyword was not recognized by "command -v".
* Fixed handling of SIGINT so that the interactive shell properly
gets back to normal after receiving SIGINT.
* Input reading functions rewritten, including some bug fixes.
----------------------------------------------------------------------
Yash 2.20 (2010-05-16)
+ Function definition using the "function" keyword.
= The "-nt" and "-ot" operators of the "test" built-in now consider
a non-existent file older in favor of Korn shell.
= [line-editing] some editing commands have been renamed:
vi-change-all -> vi-change-line
vi-yank-and-change-all -> vi-yank-all-change-line
vi-append-end -> vi-append-to-eol
* [line-editing] the clear-and-redraw-all command was broken.
----------------------------------------------------------------------
Yash 2.19 (2010-02-14)
+ The "ulimit" built-in is now available on FreeBSD.
+ In mail checking, the timestamp of the mail file is now compared
by the nanosecond if possible.
+ [line-editing] new line-editing commands:
oldest-history-bol, newest-history-bol, return-history-bol,
prev-history-bol, next-history-bol,
beginning-search-forward, beginning-search-backward
= Faster filename pattern matching.
= [line-editing] the "accept-line" command no longer accepts a
failing history search result.
= [line-editing] the following commands have been changed not to
move the cursor to the beginning of the line:
oldest-history, newest-history, return-history,
prev-history, next-history
The new commands whose names end with "-bol" provide the
previous behaviors.
* Fixed broken output of array assignment traces.
* [line-editing] the "vi-edit-and-accept" command now handles the
count.
* [line-editing] fixed the cursor position after the
search-again-forward/backward command in the emacs-like mode.
----------------------------------------------------------------------
Yash 2.18 (2009-12-27)
+ New operators for string comparison in the "test" built-in:
==, ===, !==, <, <=, >, >=
+ Operators "-nt" and "-ot" in the "test" built-in now compares the
modification time by the nanosecond if possible.
+ '--default-directory' option for the "cd" and "pushd" built-in.
+ '--remove-duplicates' option for the "pushd" built-in.
+ The right prompt and the styler prompt.
+ '--le-alwaysrp' option.
= The interpretation of escape sequences to change the font in
$PS1 and $PS2 has been changed.
= $PS3 no longer initialized.
= Escape sequences are now interpreted in $PS4 as well as in $PS1
and $PS2.
= The "echo" and "printf" built-ins now can print a null character.
* [line-editing] $LINES and $COLUMNS were wrongly ignored.
* [line-editing] fixed font color for some terminals.
----------------------------------------------------------------------
Yash 2.17 (2009-12-04)
+ '--le-visiblebell' option.
+ New operators for version comparison in the "test" built-in:
-veq, -vne, -vgt, -vge, -vlt, -vle
+ [line-editing] "eof" command
= The "typeset" built-in now prints only local variables when
invoked without the -g option or operands.
= The "typeset" built-in now prints function definitions in a
pretty format.
= When not in POSIXly-correct mode, commands in command substitu-
tion are now parsed when the command containing the substitution
is parsed.
* Fixed the parse error on parameter expansion "${#}".
* Fixed the "wait" built-in wrongly trying to wait for non-parent
processes when invoked in a subshell.
* [line-editing] vi-replace-char command was broken.
* Many other bug fixes
----------------------------------------------------------------------
Yash 2.16 (2009-10-17)
+ '--curbg' and '--curstop' options.
= '--curasync' option is now set by default.
= Changed exit status of a while/until loop whose body is empty.
= The "return" and "exit" built-ins now accepts an exit status of
256 or larger.
= The "echo" built-in now interprets octal escapes only beginning
with a backslash followed by a zero.
* Fixed a syntax error of a special built-in invoked thru the
"command" built-in causing the non-interactive shell to exit.
* Fixed the exit status of the shell when the EXIT trap is set.
* The '--allexport' option was wrongly ignored by the "read" and
"getopts" built-ins.
* Fixed segfaults and other errors in the "getopts" built-in.
* [line-editing] Fixed the vi-replace-char command causing invalid
memory access.
* [line-editing] Fixed the emacs-just-one-space command not leaving
space(s).
----------------------------------------------------------------------
Yash 2.15 (2009-09-07)
+ An interactive shell now can be interrupted by SIGINT.
+ Bracket expressions in pathname expansion are now fully supported
(provided that libc's regex implementation is correct).
= The "suspend" built-in now requires the -f option to suspend an
interactive shell that is a session leader.
= The shell no longer automatically sets the $YASH_LE_TIMEOUT
variable.
= A job-control shell now stops itself when invoked in the
background.
= A job-control shell no longer ignores SIGTTOU by default.
= The '--nocaseglob' option no longer affects pattern matching in
parameter expansions of the form "${var#xxx}", "${var%xxx}", etc.
* Fixed pathname expansion on redirection target.
* Couldn't set a signal handler to the default by the "trap"
built-in if the signal was ignored on invocation of an inter-
active shell.
* Fixed accidental interruption of built-ins by signals.
* Fixed parser so that a non-simple command is properly parsed
after alias substitution.
* Various bug fixes
----------------------------------------------------------------------
Yash 2.14 (2009-08-07)
+ The -l option for the "bindkey" built-in.
+ Negative array indices are now allowed.
= $PWD is now set to "/" (rather than "/..") after "cd /..".
= The "command" built-in with the -vb option now ignores shell
keywords, aliases and functions.
= Most of the built-ins now prints an error message and returns
non-zero when they cannot print something to the standard output.
= The "pwd" and "times" built-ins now fail when an operand is
given.
= The shell no longer exits when an assignment for a special
built-in failed if not in POSIXly-correct mode.
* "cd //" was failing if the current directory is "/".
* Invoking the "bindkey" built-in in the yashrc file was causing an
invalid memory access.
* The "command" built-in with the -vb option was failing to find
regular built-ins that are not in $PATH.
* The "dirs" command was going into an infinite loop if given an
argument.
* The -c and -d options are wrongly rejected by the "ulimit"
built-in.
* The "fg" built-in now refuses more than one operands in POSIXly-
correct mode, as described in the help.
----------------------------------------------------------------------
Yash 2.13 (2009-07-28)
+ "history" built-in
+ The -i option for the "eval", "break" and "continue" built-ins.
+ The value of the $COMMAND_NOT_FOUND_HANDLER variable is now
executed when a command is not found.
- '--autocd' option
= The exit status is now one when the "return" built-in is used
outside a function in an interactive shell.
= Revised command search and execution.
* The shell would not exit after the "exit" built-in twice in a row
when you have $PROMPT_COMMAND set and you have stopped jobs.
* The "notifyle" option not working with $PROMPT_COMMAND set.
* [line-editing] Redoing was broken.
* [line-editing] The command line was not redrawn after trap
handling.
* [line-editing] Fixed some bugs in the vi-edit-and-accept command.
----------------------------------------------------------------------
Yash 2.12 (2009-07-18)
+ Emacs-like line-editing.
+ "bindkey" built-in.
+ The $PROMPT_COMMAND variable now can be an array.
+ The value of the $YASH_AFTER_CD variable is now executed after
the working directory was changed.
= The "fg" and "bg" built-in now always sends SIGCONT to the
continued job.
= The "exit" built-in now warns about stopped jobs even when
executed after the "fg", "bg", "disown" or "wait" built-in.
* In vi-like line-editing, the wrong text was put after 30th yank.
* In vi-like line-editing, the "s" command cannot be used if the
cursor is at the beginning of line
----------------------------------------------------------------------
Yash 2.11 (2009-06-22)
+ Added the "--histspace" and "--le-noconvmeta" options.
+ Support for the $HISTRMDUP variable.
+ Support for the $YASH_LE_TIMEOUT variable.
+ The "kill" built-in with the "-l" option now accepts signal names
as operands.
= The "--le-convmeta" option now is a Boolean option.
= The "$-" special parameter now includes the "l" flag if the
shell is a login shell.
* An empty case command "case i in (*) esac" now always returns the
exit status of zero.
* Quoted words were incorrectly expanded with backslashes when the
"-f" option is set.
* Fixed invalid memory access in the "v" command of vi-like
line-editing.
----------------------------------------------------------------------
Yash 2.10 (2009-05-27)
+ History search in line-editing.
= Empty lines are no longer stored in the history.
= In the vi-like line-editing, "cw" and "cW" now work as in vi.
* Setting the "notifyle" option caused a segfault if yash was
configured with line-editing disabled.
* In line-editing, undoing a change to a history entry did not
restore the cursor position properly.
* Some fixes for invalid memory access during line-editing.
----------------------------------------------------------------------
Yash 2.9 (2009-05-10)
+ Line-editing in the interactive mode.
x Line-editing is not fully implemented.
+ Multiple instances of shell that use the same file for the
history file now share the history.
- The "history" built-in has been removed.
= Now non-ASCII alphabets are allowed in variable names.
= Now nested parameter expansions must be enclosed by braces.
= The "help" built-in now prints an error message if the specified
built-in is not found.
* Fixed floating-point arithmetics in arithmetic expansions.
* Fixed parser for arithmetic expansions that was incorrectly
rejecting identifiers that start with underscores.
* Fixed parser that had trouble parsing parameter expansions
containing the hash sign like "${#=x}".
* Fixed the help message for the "pwd" built-in.
----------------------------------------------------------------------
Yash 2.8 (2009-04-18)
+ Brace expansion with delta: {a..b..c}
+ The "command" built-in's -b and -B options now can be used with
the -v and -V options.
= Yash now conforms to POSIX.1-2008.
. The "read" built-in now always removes trailing white-spaces
from the input.
. The results of tilde expansion are no longer subject to field
splitting and pathname expansion.
. The "pwd" built-in with the -P option no longer sets the $PWD
variable.
. "cd -L foo/.." is no more the same as "cd -L ." in that it is
an error when the directory "foo" does not exist.
. The "command" built-in's -p option now can be used with the -v
and -V options.
. In POSIXly-correct mode, all asynchronous commands now ignore
SIGINT and SIGQUIT (even when job control is active).
* When executing commands edited by the "fc" built-in, the $?
variable was incorrectly assigned the exit status of the editor
invoked by "fc".
* Backslashes, commas and braces in $IFS were incorrectly ignored
in field splitting.
* Pathname expansion failed if we do not have the read permission
for the specified directory even when we only need the search
permission.
* The signal mask of commands invoked by the shell now inherits
that of the shell (except for trapped signals).
* The "command" built-in now properly handles directories given as
the commands when the "autocd" option is on.
----------------------------------------------------------------------
Yash 2.7 (2009-03-02)
+ Parameter expansion ${array[index]:=value} now allows assignment
to an empty array element.
+ Here-string by the "<<<" operator.
+ New redirection operator ">>|" opens a pipe.
- Loop pipes no longer supported.
= The $IFS variable is always initialized to the default value when
the shell is invoked.
* The "echo" and "printf" built-ins now print an error message on
failure.
* A quoted period at the beginning of a filename was not properly
matching during filename expansion.
----------------------------------------------------------------------
Yash 2.6 (2009-02-11)
+ Added the -q option to the fc built-in.
+ Compound commands may now contain no commands inside.
* "alias -p" now prints commands with proper escape.
* In POSIXly-correct mode, a semicolon followed by the identifier
followed by "for" is now treated as an error.
* Global aliases are now allowed after compound commands.
* The "fg" and "wait" built-ins were causing invalid memory access
when the "-o notify" option is enabled.
----------------------------------------------------------------------
Yash 2.5 (2009-01-16)
= Redirection of FDs used by the shell is now error.
* Some redirection syntax errors were overlooked.
* Fixed the "sig.y" test failure.
* When an "exec" command with redirections is enclosed in a brace
with redirections, the redirections to the brace are now properly
closed after execution.
* Fixed parsing error of a comment after the identifier of a for
statement.
----------------------------------------------------------------------
Yash 2.4 (2008-12-23)
= The long option for the -p option of the "jobs" built-in has been
changed from "--pid-only" to "--pgid-only".
* Trap of SIGCHLD, SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU were
wrongly set to "ignore" in some condition.
* Signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGTSTP, SIGTTOU
were mistakenly reset in some moments.
* Fixed the exit status of the "wait" built-in returned when
interrupted by a signal.
* Fixed file access permission test
* "command -V xxx/yyy" now prints an error message if "xxx/yyy" is
not a valid command.
----------------------------------------------------------------------
Yash 2.3 (2008-12-07)
= Now changing LC_CTYPE immediately takes effect if the shell is
interactive and not in the POSIXly-correct mode.
* Fixed parameter expansion: empty words are now expanded properly.
* Fixed a race condition, which was causing some signals ignored.
* Assignments using the typeset/readonly/export built-ins failed to
update the shell's internal data. This caused the shell to keep
using the old PATH after the PATH has been changed.
----------------------------------------------------------------------
Yash 2.2 (2008-10-31)
+ "help", "pushd", "popd" and "dirs" built-ins
= The value of $PWD set by the "cd" built-in is fixed. It now has a
correct value when changing to a relative path from the root
directory.
* Pathname expansion not properly performed for patterns including
"." or "..".
----------------------------------------------------------------------
Yash 2.1 (2008-10-16)
+ Array variables
+ "array", "echo", "printf" and "test" built-ins
+ The -A option for the "read" built-in
* The colon flag in a parameter expansion like "${FOO:-bar}" was
ignored if the value of the parameter begins with a certain
character.
* The readonly attribute was ignored when an assignment occurs
against a command invocation
* Passing "=" as a name to the "unset" built-in incorrectly unset
the positional parameters and caused a potential invalid memory
access.
* Field splitting on variable values that consist only of spaces
produced wrong results.
* Test of file access permission now uses the effective user/group
IDs rather than the real user/group IDs.
----------------------------------------------------------------------
Yash 2.0 (2008-09-25)
+ "history" built-in
+ Command redirection
* A POSIXly-correct non-interactive shell exits when a particular
error occurred on a special built-in according to POSIX.
* Alias substitution routines were improved.
* Other bug fixes
----------------------------------------------------------------------
Yash 2.0 beta2 (2008-09-11)
+ Command history
+ "type", "hash" and "fc" built-ins
= If the "command" built-in with the -V option fails to find a
command, an message is printed.
* Invocation of an external command with an assignment to the $PATH
variable caused an invalid memory access.
* Single quote not parsed properly in some circumstances.
* Other bug fixes
----------------------------------------------------------------------
Yash 2.0 beta1 (2008-09-06)
+ "read", "getopts" and "command" built-ins
+ '--autocd' and '--curasync' option
+ Mail check feature
+ The prompt command
= The "readonly" and "export" built-ins now affects global
variables by default.
* The standard input is no longer buffered
* The "typeset" built-in now allows any characters other than '='
for variable names.
* The special parameter $? reflects the exit status of a command
substitution in a variable assignment.
* Many other bug fixes
----------------------------------------------------------------------
Yash 2.0 beta0 (2008-07-27)
+ "eval", "exec", ".", "times", "umask", "typeset", "export",
"readonly", "unset", "shift" and "trap" built-ins
+ "wait" built-in now can be interrupted
+ Arithmetic expansions
+ Interactive shell now notifies the process killed by a signal
- "/etc/profile" and "~/.profile" are no longer sourced on start-up
* Fixed token delimitation in alias substitution
* Fixed token delimitation on assignments without values
* Many other bug fixes
----------------------------------------------------------------------
Yash 2.0 alpha2 (2008-07-10)
+ Initialization files such as "/etc/profile" and "~/.yashrc" are
now sourced on start-up.
+ '--noprofile', '--norcfile' and '--rcfile' options
+ "pwd", "set", "exit", "return", "break", "continue", "jobs",
"fg", "bg", "wait", "disown", "alias" and "unalias" built-ins
* '--nocaseglob' was misinterpreted as '-c'.
* It was not fully case-insensitive when '--nocaseglob' is on.
* If job control is off, an interactive shell no longer prints
changed status of jobs before prompt.
= Error handling for unset parameters was improved.
= The help message for 'yash --help' is now much briefer.
----------------------------------------------------------------------
Yash 2.0 alpha1 (2008-06-14)
+ New options implemented: -x, -h, -a
= The default value of 'PS3' is not set in POSIXly-correct mode.
+ 'configure' accepts new '--no-undefined' option
+ ":", "true", "false", "cd" built-ins
* Command hashtable is now cleared when PATH is assigned.
* Assertion failure when a null character is input
* Many other bug fixes
----------------------------------------------------------------------
Yash 2.0 alpha0 (the first release of version 2.x) (2008-05-26)
x Arithmetic expansion is not implemented
x Built-ins are not implemented at all
|