GNU Bash 5.1

Bash — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX.

Представляет собой командный процессор, работающий, как правило, в интерактивном режиме в текстовом окне. Bash также может читать команды из файла, который называется скриптом (или сценарием). Как и все Unix-оболочки, он поддерживает автодополнение имён файлов и каталогов, подстановку вывода результата команд, переменные, контроль над порядком выполнения, операторы ветвления и цикла. 

Ключевые обновления в новой версии:

  • Переработан движок генерации псевдослучайных чисел. Добавлена переменная 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-каналы, независимо от того, завершены ли связанные с ними процессы.

Название «bash» является акронимом от англ. Bourne-again-shell («ещё-одна-командная-оболочка-Борна») .

 

Последние материалы