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