Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Первая публичная версия 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)
.
Описание всего нового функционала смотрите ниже.
Этот параметр появился и в 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
. ff. Сsuspend -f
теперь работа оболочки приостанавливается, даже если контроль задач отключён. gg. Поскольку нет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-специалистом:
- Курс по DevOps (6 месяцев)
- Профессия Data Scientist (24 месяца)
- Профессия Data Scientist
- Профессия Data Analyst
- Курс «Математика для Data Science»
- Курс «Математика и Machine Learning для Data Science»
- Курс по Data Engineering
- Курс «Machine Learning и Deep Learning»
- Курс по Machine Learning
Python, веб-разработка
- Профессия Fullstack-разработчик на Python
- Курс «Python для веб-разработки»
- Профессия Frontend-разработчик
- Профессия Веб-разработчик
Мобильная разработка
- Профессия iOS-разработчик
- Профессия Android-разработчик
Java и C#
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия C#-разработчик
- Профессия Разработчик игр на Unity
От основ — в глубину
- Курс «Алгоритмы и структуры данных»
- Профессия C++ разработчик
- Профессия «Белый хакер»
А также
- Курс по DevOps
- Все курсы