
Первая публичная версия bash-5.2 теперь доступна по URL-адресам ниже. Подробности к старту курса по DevOps — под катом.
- ftp.cwru.edu/pub/bash/bash-5.2.tar.gz;
- ftp.gnu.org/pub/gnu/bash/bash-5.2.tar.gz;
- из ветки master git-репозитория bash;
- с обычных зеркальных сайтов GNU.
Bash — это проект GNU Bourne Again SHell, полная реализация спецификации оболочки POSIX с интерактивным редактированием командной строки, контролем задач на архитектурах, где это поддерживается, csh-подобный функционал (подстановка из истории и раскрытие скобок) и многое другое. Подробнее о функционале Bash, новом для этого типа оболочки, смотрите в файле doc/bashref.texi. Есть и большая man-страница, как на Unix, с полным описанием функционала оболочки.
Чтобы сообщать об ошибках в этой версии, воспользуйтесь bashbug. Программа собирается и устанавливается одновременно с bash.
Установка
Для начала прочтите файл README. Инструкции по установке находятся в файле INSTALL.
Новый функционал
Это обновление к пятому большому выпуску bash.
Полное описание нового функционала смотрите в файле NEWS дистрибутива bash-5.2. Ниже приведена копия соответствующих фрагментов.
В этом выпуске устранены баги версии bash-5.1 и добавлен новый функционал.
В числе устранённых — баги, из-за которых работа оболочки завершалась аварийно. Подробности — в файле CHANGES.
Самый заметный новый функционал — переписанный код парсинга подстановки команд, в котором рекурсивно вызывается bison. Это замена синтаксическому анализу прошлых версий, призванная улучшить проверку синтаксиса и отлавливать синтаксические ошибки намного раньше. Синтаксический анализ в оболочке должен стать намного лучше, допускается лишь однократное расширение индексов массива. Это выражается во встроенном unset, в расширениях слов, в условных конструкциях и т. д., в которых как побочный эффект могут присваиваться значения переменных. Встроенной командой unset в ассоциативных массивах отменяется установка ключа со значением индекса @ или *. Отменить её для всего массива можно с помощью unset arrayname.
Добавлен параметр `patsub_replacement`. Если он установлен, символ `&` в заменяемой строке используется для подстановки части строки, соответствующей заданному шаблону. Чтобы вставить в строку сам литерал `&`, экранируйте его обратным слешем. Этот параметр включён по умолчанию. В bash добавлены случаи, при которых ветвление запрещено, в том числе в большинстве случаев с $(<file). Описание всего нового функционала смотрите ниже.
Параметр patsub_replacement появился и в Readline. В частности, новый параметр enable-active-region, с помощью которого активная область и bracketed-paste контролируются отдельно. Его значение по умолчанию для них одинаково, при активации bracketed-paste активируется и активная область. Теперь пользователи могут её отключить, оставив включённым bracketed-paste. Доступны две новые привязываемые строковые переменные. Их значения — escape-последовательности терминала, одной из которых задаётся цвет для отображения активной области, а другой он отключается. Будучи заданными, они используются вместо режима терминала standout. Наконец, в Readline теперь при каждом вызове проверяется наличие изменений в языковых настройках (LC_ALL/LC_CTYPE/LANG), а при изменении локали меняются соответствующее языковое отображение и переменные с привязками ключей.
Имеется несколько изменений, ломающих совместимость bash-5.1 и bash-5.2. Если уровень совместимости с оболочкой не более 50, в here-doc и here-строках используются временные файлы. Работа встроенного в bash-5.2 unset с индексами массива @ и * отличается от прошлых версий и зависит от того, индексный это массив или ассоциативный. B bash-5.2 должно предотвращаться двойное расширение индексов массива, которое происходит в определённых обстоятельствах (особенно при арифметических вычислениях), как если бы был задан параметр оболочки assoc_expand_once. Чтобы вернуться к прежнему поведению, задайте соответствующий уровень совместимости. Подробнее — в файле COMPAT.
При необходимости Bash можно связать с уже установленной библиотекой Readline, а не частной версией в lib/readline. Только в версии readline-8.1 и новее могут указываться все символы, необходимые для bash-5.2; работа прошлых версий библиотеки Readline не будет корректной.
Полный список изменений между bash-5.1 и bash-5.2 слишком большой, чтобы приводить его здесь. Он содержится в файле CHANGES.
Readline
Доступна версия 8.2 автономной библиотеки Readline с собственными скриптами конфигурации и файлами Makefile. Получить её можно по URL-адресам:
- ftp.cwru.edu/pub/bash/readline-8.2.tar.gz
- ftp.gnu.org/pub/gnu/readline/readline-8.2.tar.gz
- из ветки master git-репозитория GNU readline
- с обычных зеркальных сайтов GNU.
Форматированная документация Readline содержится в tar-файле дистрибутива readline. Изменения в Readline описываются отдельно. Как всегда, спасибо за вашу помощь.
Это краткое описание нового функционала bash-5.2. Как всегда, полные описания смотрите на справочной странице (doc/bash.1).
Новый функционал в bash
- В
bashпри вызовеmallocвозвращается память, выровненная по 16-байтовым границам. - Чтобы считывать тайм-ауты, используется новый встроенный фреймворк таймера.
- Чтобы рекурсивно вызывать парсер и из проанализированной команды выполнять повторную сборку командной строки, переписан код для парсинга подстановки команд. В итоге — улучшается проверка синтаксиса, а ошибки отлавливаются намного раньше. При этом, если после парсинга подстановки команд остаётся считать here-doc, в оболочке выводится сообщение-предупреждение и тело here-doc считывается из текущего входного потока.
- Операнд Во встроенном
ulimit, который остаётся после анализа всех параметров и аргументов, теперь считается аргументом последней команды, указанной в параметре. Это нужно для совместимости с POSIX. - При считывании тела here-doc выполняется парсинг
$'...'и$"...". - Возможна работа привязываемых readline-команд
shell-expand-lineиhistory-and-alias-expand-lineс'...'и$"...". - Появилась привязываемая readline-команда
spell-correct-wordдля проверки правописания текущего слова. - Во встроенном
unsetаргументы теперь должны считаться индексами массива без парсинга или увеличения индекса, даже когда не заданassoc_expand_once. - В
config-top.hпоявилось значение по умолчанию для$BASH_LOADABLES_PATH. - Присваивание ассоциативного массива и некоторые случаи ссылок, например с
test -vтеперь можно использовать@и*как ключи. - B bash, когда выполняются конструкции оболочки и расширения слов, индексы индексного массива должны раскрываться только один раз.
- Во встроенном
unsetотменяется установка ключа со значением индекса@или*для ассоциативных массивов. Отменить её для всего массива можно с помощьюunset arrayname. В индексных массивах удаляются все их элементы без отмены установки ключа, напримерA=(). - В других встроенных командах (
printf/test/read/wait) лучше удаётся не выполнять парсинг индексов массива, если задан array_expand_once. - В числовой аргумент readline-команд задана новая переменная
READLINE_ARGUMENT, определяемая с помощьюbind -x. - Новый параметр оболочки
varredir_closeстановится причиной автоматического закрытия вbashфайловых дескрипторов, открытых с помощью {var}<fn и других стилей varassign-перенаправления, если это не аргументы встроенногоexec. - В имени скрипта при запуске любых (неинтерактивных) загрузочных файлов, таких как
$BASH_ENV, теперь задаётся специальный параметр$0. - В
enable nameпри попытке включить встроенную команду без каких-либо параметров, которой нет, во встроенномenableдолжна загружаться (с помощью пути поиска по умолчанию) загружаемая встроенная команда. - Во встроенном
printfпоявился спецификатор формата %Q. Отличается от %q тем, что к исходному аргументу без кавычек применяется любая заданная точность, затем он заключается в кавычки, и выводится результат. - Новым параметром
noexpand_translationsопределяется, заключён ли в одинарные кавычки преобразованный вывод$«…». - Появился оператор преобразования параметров
@k. В отличие от@K, после разделения слов результат в нём расширяется до отдельных слов. - Появилась альтернативная реализация массива, выбираемая во время
configure(настройки). В ней скорость доступа оптимизируется за счёт бо́льшего расходования памяти (используется новый параметр конфигурации--enable-alt-array-implementation). - Если в перенаправлении
[N]<&WORD-или[N]>&WORD- WORDраскрывается в пустую строку, оно будет считаться [N]<&-или[N]>&-и файловый дескриптор N (по умолчанию 0) закроется. - Недопустимые операторы преобразования параметров — это теперь недопустимые расширения слов, поэтому они становятся причиной неустранимых ошибок в неинтерактивных оболочках.
- Появился новый параметр оболочки
patsub_replacement. Когда он включён, символ&в строке замены раскрытия подстановки шаблона заменяется частью строки, которая соответствует этому шаблону. Символ&экранируется обратным слешем и вставляется литерал. -
command -pбольше не используется для поиска команд в хеш-таблице. - Чтобы включать в компиляцию или исключать из неё поддержку
$«…», появился параметрconfigure-enable-translatable-strings. - Чтобы при раскрытии имени пути никогда не возвращалось
.или.(если нет явно заданного соответствия), появился параметр оболочкиglobskipdots. Он включён по умолчанию. - Ссылки на массивы с использованием
@и*в качестве значения переменныхnameref(declare -n ref='v[@]'; echo $ref) больше не становятся причиной выхода из оболочки, если включёнset -u, а установкаarray (v)отменена. - Появилось новое название привязываемой readline-команды:
vi-edit-and-execute-command. - В режиме posix встроенным
printfпроверяется наличие модификатора длиныL. Для спецификаторов преобразования с плавающей точкой используетсяlong double. А если их нет —double. - Появился параметр
globstar, который учитывается при автодополнении кода вglobbing. - С
suspend -fтеперь работа оболочки приостанавливается, даже если контроль задач отключён - Поскольку нет
declare -(эквивалентаlocal -), использованиеlocal -в выводеlocal -pобязательно.
Новый функционал Readline
- Номер версии библиотеки истории для использования в приложениях содержится теперь в
HS_HISTORY_VERSION. - Дорабатывается множественное раскрытие истории со строками, которые раньше могли быть для этого препятствием (например,
abc!$!$). - Появился новый фреймворк для тайм-аутов readline. И с ним новые общедоступные функции для задания тайм-аутов и запрашивания времени до их срабатывания. А ещё функция перехвата, которая может активироваться по истечении времени readline. Для указания тайм-аута теперь имеется новое значение состояния.
- Сочетания клавиш с автоматической привязкой к termcap для пролистывания вперёд и назад
history-search-backwardиhistory-search-forwardсоответственно. - Для получения записи по числовому аргументу появилась новая привязываемая команда
fetch-history. Отрицательные аргументы отсчитываются с конца истории. - Теперь
vi-undo— привязываемая команда. - Появился параметр
enable-active-region, с помощью которого активная область иbracketed-pasteконтролируются отдельно. Его значение по умолчанию для них одинаково, при активацииbracketed-pasteактивируется и активная область. Теперь пользователи могут её отключить, оставивbracketed-pasteвключённым. - Теперь
rl_completer_word_break_characters— этоconst char *, какrl_basic_word_break_characters. - Readline используется для поиска пользовательского расширения имени файла в
$LS_COLORS(*.readline-colored-completion-prefix), которое используется в качестве цвета по умолчанию для отображения общего префикса, когда заданcolored-completion-prefix. - Две новые привязываемые строковые переменные
active-region-start-colorиactive-region-end-color. Первая — чтобы задавать цвет для отображения активной области, вторая — для её отключения. Будучи заданными, они используются вместо режима терминалаstandout. - С новым состоянием
readline(RL_STATE_EOF) видимой в приложении переменной (rl_eof_found) в приложениях можно определять, когда вreadlineпроисходит считывание доEOF(конца файла) перед вызовом хукаdeprep-terminal. - Появился новый параметр конфигурации
-with-shared-termcap-library, которым принудительно связываются библиотеки общего доступаreadlineиtermcap(илиcurses/ncurses/termlib), так что в приложениях этого делать не нужно. - В
readlineтеперь при каждом вызове проверяется наличие изменений в языковых настройках (LC_ALL/LC_CTYPE/LANG), а при изменении локали меняются соответствующее языковое отображение и переменные с привязками ключей.
Поможем разобраться в bash и не только, чтобы вы прокачали карьеру и стали востребованным IT-специалистом:Чтобы увидеть все курсы, кликните по баннеру:

- Профессия Data Scientist
- Профессия Data Analyst
- Курс «Математика для Data Science»
- Курс «Математика и Machine Learning для Data Science»
- Курс по Data Engineering
- Курс «Machine Learning и Deep Learning»
- Курс по Machine Learning
Python, веб-разработка
- Профессия Fullstack-разработчик на Python
- Курс «Python для веб-разработки»
- Профессия Frontend-разработчик
- Профессия Веб-разработчик
Мобильная разработка
Java и C#
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия C#-разработчик
- Профессия Разработчик игр на Unity
От основ — в глубину
А также
dolfinus
Как насчёт вычитки текста перед публикацией?
Я 5 раз перечитал, но все равно не понял, что тут написано.
Структура перевода оставляет делать лучшего, его как будто через блендер пропустили.
Можно вы не будете заниматься переводами?