Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Сегодня стало известно о выходе новой версии командного интерпретатора 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-каналы, вне зависимости от завершения связанных процессов.
С полным списком изменений можно ознакомиться вот здесь.