После двух с половиной лет разработки опубликована (http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063....) новая версия командного интерпретатора GNU Bash 5.0 (http://www.gnu.org/software/bash/), используемого по умолчанию в большинстве дистрибутивов Linux. Одновременно состоялся (http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00064....) релиз библиотеки readline 8.0, применяемой в bash для организации редактирования командной строки.
Значительное изменение номера версии Bash связано с внесением изменений, нарушающих обратную совместимость. В новой версии переработан код, связанный с обработкой ссылочных переменных nameref, что привело к отдельным изменениям поведения при использовании nameref (например, цикл разбора имён nameref внутри функций теперь приводит к определению переменных не в локальном, а в глобальном контексте). Кроме того, по умолчанию переменные BASH_ARGC и BASH_ARGV теперь выставляются только при включении расширенного отладочного режима, что позволило избавиться от проблем с производительностью при передаче скриптами большого числа аргументов. Для работы нового выпуска необходимо наличие свежей библиотеки readline, т.е. для установке Bash 5.0 в дистрибутивах с выпусками readline до 8.0 потребуется переустановка readline или встраивание новой версии библиотеки при сборке Bash.
Из улучшений (http://git.savannah.gnu.org/cgit/bash.git/tree/NEWS?h=bash-5.0) можно отметить:
- Предложены новые переменные окружения: BASH_ARGV0 (принимает значение $0), EPOCHSECONDS (эпохальное время в секундах) и EPOCHREALTIME (эпохальное время с точностью до микросекунд);
- Во встроенную команду "history" добавлена поддержка выборочного удаления записей из БД с историей операций ("history -d start-end") и возможность указания отрицательных значений в качестве смещения первой удаляемой записи относительно конца списка (например, "-1" указывает на предыдущую команду);
- Добавлена опция "localvar_inherit", при установке которой локальные переменные наследуют значение переменный с теми же именами, определёнными в вышестоящей области видимости;
- Добавлена опция "assoc_expand_once", при установке которой оболочка осуществляет раскрытие индексов ассоциативных массивов только один раз;- Включена по умолчанию опция "globasciiranges", допускающая использование масок для определения диапазонов символов ([a-z]);
- Добавлены встроенные реализации команд rm, stat, seq и fdflags;
- Во встроенной команде "wait" обеспечена возможность ожидания замещения последнего процесса и добавлена опция "-f" для ожидания завершения процесса или работы вместо ожидания изменения состояния;
- Добавлена возможность жёсткого определения в файле
config-top.h значений $PATH и $HISTSIZE. Данные значения будут более приоритетными, чем значения из переменных окружения и могут применяться для создания ограниченных окружений;
- При автодополнении ввода теперь не учитывает регистр символов для имён функций и псевдонимов (alias), если в readline выставлен режим completion-ignore-case;- Во встроенной команде "umask" разрешено использование режимов доступа и масок, превышающих восьмеричное значение 777;
- Во встроенной команде "times" в зависимости от настройки локали теперь может выводиться не только точка, но и запятая в качестве разделителя дробных значений;
- Добавлена отключенная по умолчанию и недокументированная опция для включения отправки истории команд в syslog;
- Встроенная реализация malloc переведена на использование mmap для обеспечения запроса блоков, размером больше 128 Кб, и возможности возврата страниц памяти ядру после выполнения mfree;- В качестве индексов ассоциативных массивов теперь могут использоваться строки, состоящие только из символов пробела;- В разряд видимых переведены ранее недокументированные опции localvar_unset и progcomp_alias;
- Переменная "$_" теперь не меняет своё значение, когда shell запускает команду, выполняющую fork.
URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063....
Новость: https://www.opennet.ru/opennews/art.shtml?num=49917