Вышел Bash 5.1: что нового?

Наконец-то вышел новый Bash 5.1, разработкой занимались 2 года. Ещё готов релиз библиотеки readline 8.1: её используют, чтобы организовать редактирование командной строки.

Что нового? (кратко)

Кратко не получится, нужно подробно.

Что нового? (подробно)

  • Переработан движок генерации псевдослучайных чисел. Добавлена переменная SRANDOM: она содержит случайное 32-разрядное число из системного генератора псевдослучайных чисел (вместо LCRNG использованы вызовы getrandom/getentropy, /dev/urandom или arc4random, в зависимости от ОС). Выдаваемая последовательность теперь нелинейная и не повторяется при идентичном следовании запросов.
  • Для ассоциативных массивов реализована поддержка составных присвоений, в которых передаётся набор из пар в формате ключ/значение («[key]=value»). Реализовано динамическое увеличение размера хэш-таблицы в зависимости от типа данных, добавляемых в ассоциативный массив.
  • Добавлена переменная PROMPT_COMMANDS, которую можно использовать для запуска нескольких команд перед выводом приглашения командной строки.
  • В команду wait добавлена опция «-p имя переменной» для сохранения в переменной информации о PID процесса, возвращённого при выполнении «wait -n» или вызова wait без аргументов. В «wait -n» теперь допускается передача списка работ (wait будет ожидать изменения состояния любой задачи из списка).
  • Добавлены новые загружаемые встроенные команды: asort, mktemp, accept, mkfifo, csv и cut/lcut.
  • В POSIX-режиме реализована возможность замещения процесса, при которой ввод и вывод команды обрабатывается другими командами как файл (например, «diff <(sort file1) <(sort file2)»).
  • Добавлены новые параметры операторов преобразования: «U», «u» и «L» для преобразования в верхний регистр всей строки, преобразования в верхний регистр первого символа и преобразования в нижний регистр, а также параметр «K» для отображения ассоциативного массива в формате ключ/значение.
  • Для включения режима совместимости с прошлыми версиями теперь нужно использовать переменную BASH_COMPAT (через опцию compat50 установить режим совместимости с bash 5.0 не получится).
  • В Readline по умолчанию включён режим выделенной вставки (bracketed-paste), при котором извлекаемые из буфера обмена данные обрамляются escape-последовательностями («\e[200~» и «\e[201~») для визуального выделения поступивших из буфера обмена данных. В Readline обеспечена подсветка подобных вставок, а также подсветка текста, найденного при инкрементальном и неинкрементальном поиске в истории. Расширено число команд и ситуаций, для которых подставляются метки для подсветки.
  • Readline реализовано автоматическое включение горизонтальной прокрутки на однострочных терминалах.
  • Добавлена команда rl-clear-display для очистки содержимого экрана и буфера прокрутки.
  • Возвращено старое поведение, связанное с раскрытием файлового пути при указании слов, включающих обратные слэши, но не использующих спецсимволы раскрытия маски. Как и в bash 4.4 подобные пути теперь не раскрываются (изменённое поведение Bash 5.0 соответствовало стандарту POSIX, но было отрицательно воспринято пользователями и комитет POSIX согласился изменить спецификацию). Кроме того режим GLOBIGNORE теперь игнорирует указание «.» и «..» в качестве указанных в терминале компонентов пути.
  • Изменена обработка исключений (trap) при чтении данных с терминала при помощи конструкций read и select. Встроенная команда select теперь запускает trap-обработчики в случае прерывания сигналом внутреннего вызова команды read. Разрешён рекурсивный запуск обработчиков SIGINT.
  • Разрешено использование команды «read -e» с произвольными файловыми дескрипторами (read -u N).
  • Добавлена возможность связывания с уже установленной в системе библиотекой Readline, вместо встроенной версии lib/readline (для подобного связывания требуется версия Readline 8.1).
  • В команде «bind -x» добавлена поддержка определения разных привязок клавиатурных комбинаций для разных режимов редактирования и разных раскладок клавиатуры.
  • Реализована оптимизация числа форков, выполняемых при запуске команд в subshell или при помощи «bash -c». При выполнении «bash -c» статус выполнения работ теперь можно узнать командой jobs.
  • Код сопоставления по шаблону теперь использует вызов fnmatch для учёта одинаково выглядящих строк, но отличающихся по кодам символов.
  • В readline добавлена команда shell-transpose-words, использующая то же определение слов, что и в команде shell-forward-word. По умолчанию добавлены клавиатурные привязки для команд shell-forward-word, shell-backward-word, shell-transpose-words и shell-kill-word.
  • В начальном окружении командной оболочки теперь доступна переменная ARGV0, которой присвоено значение $0.
  • Добавлен оператор «test -N», определяющий время с наносекундной точностью.
  • Разрешена запись в переменную BASH_REMATCH.
  • В ulimit добавлена команда «-R» для просмотра и установки ресурса RLIMIT_RTTIME.
  • Вызов malloc на 64-разрядных системах теперь выравнивает возвращаемую память по 16 байтовой границе.
  • При выходе из командной оболочки bash теперь пытается закрыть все FIFO-каналы, независимо от того, завершены ли связанные с ними процессы.

Добавить комментарий

Спасибо, что поделились