Релиз командного интерпретатора Bash 5.1
После двух лет разработки опубликована новая версия командного интерпретатора GNU Bash 5.1, используемого по умолчанию в большинстве дистрибутивов Linux. Одновременно сформирован релиз библиотеки readline 8.1, применяемой в bash для организации редактирования командной строки.
Из ключевых улучшений можно отметить:
- Переработан движок генерации псевдослучайных чисел. Добавлена переменная 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-режиме реализована возможность замещения процесса (process substitution), при которой ввод и вывод команды обрабатывается другими командами как файл (например, «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-каналы, независимо от того, завершены ли связанные с ними процессы.
Источник: http://www.opennet.ru/opennews/art.shtml? num=54214
© OpenNet