Новая версия командного интерпретатора GNU Bash 5.1 уже в строю

3ea0ff03af3b42b348eeb0416d6a28d1.jpg


Сегодня стало известно о выходе новой версии командного интерпретатора GNU Bash 5.1. На ее разработку ушло целых два года. Кроме того, есть и еще новость — сформирован релиз библиотеки readline 8.1, которая применяется в bash для организации редактирования командной строки.

О том, что появилось нового и полезного — под катом.

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

С полным списком изменений можно ознакомиться вот здесь.

1hdqmj1bvguax5hnugdz0ci_jbw.jpeg

© Habrahabr.ru