LINUX.ORG.RU

Вышел bash 5.0

 , ,


3

7

Почти через 10 лет после выхода bash 4.0 и чуть больше чем через 2 года после выхода bash 4.4 состоялся релиз пользовательской оболочки и интерпретатора скриптов версии 5.0.

В новой версии:

  • Встроенная команда «wait» теперь ждёт создания замены последнего процесса;
  • Новые переменные $EPOCHSECONDS и $EPOCHREALTIME, которые раскрываются в секунды с начала эпохи Unix с точностью до секунд и с точностью до микросекунд соответственно;
  • Новые загружаемые встроенные команды: rm, stat, fdflags;
  • Новая переменная $BASH_ARGV0, которая раскрывается в $0 и устанавливает $0 в назначение;
  • При передаче числового аргумента readline'овская команда shell-expand-line больше не удаляет кавычки и подавляет замену команды и процесса;
  • Команда «history -d» теперь понимает отрицательные аргументы как сдвиг с конца истории команд;
  • При передаче аргумента «name» команде «coproc» теперь активируется режим раскрытия слов, таким образом уникальные coproc'ы теперь могут быть созданы в циклах;
  • Цикл раскрытия имён из именных ссылок в функциях теперь раскрывает их в имена переменных в глобальной области видимости;
  • У встроенной команды «wait» теперь появилась опция "-f", которая указывает ждать полного завершения процесса вместо изменения его состояния;
  • Теперь появилось определение в файле config-top.h, которое позволяет оболочке в ограниченном режиме переопределять статическое значение $PATH независимо от содержимого при запуске;
  • Теперь замена процессов не наследует опцию «v» в отличие от замены команд;
  • Теперь если оболочка в неинтерактивном режиме с включенным управлением процессами замечает, что основноц процесс завершился с SIGINT, то ведёт себя как при получении SIGINT;
  • Теперь Posix режим включает единожды запускаемую SIGCHLD ловушку для каждого завершающегося процесса-потомка даже если управление процессами отключено;
  • Новая shopt опция: localvar_inherit; Если она установлена, то локальная переменная наследует значение переменной с таким же именем в ближайшей предшествующей области видимости; Однако, значения переменных несовместимых типов (например, индексированный массив вместо ассоциативного массива) наследоваться не будут;
  • «bind -r» теперь проверяет связана ли указанная последовательность прежде чем связать её с NULL'ом во избежание создания раскладок для многоклавишных последовательностей;
  • Числовой аргумент для команды «operate-and-get-next» теперь указывает какую строку из истории команд нужно редактировать;
  • Позиционные параметры теперь определяются до запуска стартовых файлов, а потому в них теперь стало можно использовать $@;
  • Появилась новая опция, которая доступна на этапе компилирования, которая позволяет отключить проверку того, чтобы наследованная $OLDPWD была директорией;
  • Встроенная команда «history» теперь может удалять диапазоны команд из истории через "-d начало-конец";
  • Встроенная привязываемая команда «vi-edit-and-execute-command» теперь переводит readline обратно в режим вставки vi после выполнения команд из редактируемого файла;
  • Дополнение команд теперь учитывает соответствия алиасам и именам функций оболочки без учёта регистра если установлена переменная completion-ignore-case;
  • Новая опция оболочки «assoc_expand_once», которая включает попытку раскрытия индексов ассоциативных массивов только единожды;
  • Теперь оболочка устанавливает $BASH_ARGV и $BASH_ARGC при запуске только при включенном расширенном отладочном режиме, в то время как раньше они устанавливались независимо от дополнительных условий;
  • Встроенная команда «umask» теперь позволяет указывать режимы и маски больше чем восьмеричное 777;
  • Встроенная команда «times» теперь учитывает локаль при выводе разделителя между целой и дробной частями десятичного числа;
  • В наличии новая, отключенная по умолчанию и незадокументированная опция оболочки, которая позволяет включать и отключать отправку истории команд syslog'у во время их выполнения;
  • Больше нельзя определять переменные перед специальными встроенными командами, которые изменяют атрибуты переменных, а затем возвращают их обратно в исполняемую среду, до тех пор пока уровень совместимости не установлен в 44 или меньше;
  • Теперь можно определять дефолтное значение $HISTSIZE во время компиляции в файле config-top.h;
  • Встроенная команда «complete» теперь принимает опцию "-I", которая указывает что нужно дополнять первое слово в строке;
  • Встроенная в bash malloc() теперь использует mmap() (по возможности) для удовлетворения запросов более чем 128 Кб, таким образом free() теперь может задействовать mfree() для возвращения страниц памяти ядру;
  • Опция «globasciiranges» теперь включена по дефолту и может быть отключена при компиляции;
  • Индексированные и ассоциативные массивы теперь разрешают индексы состоящие исключительно из пробелов;
  • Опция «checkwinsize» теперь включена по дефолту;
  • shopt опции «localvar_unset» и «progcomp_alias» теперь видимы и задокументированы;
  • Обработчик имён сигналов теперь понимает имена от «SIGRTMIN+n» до «SIGRTMAX»;
  • Новая загружаемая встроенная команда seq;
  • Выполнение ловушек теперь учитывает внутренние вызовы «eval»;
  • Переменная $_ теперь не меняется при выполнении форкающей команды;
  • Встроенная команда «kill» теперь принимает такие аргументы как -sSIGNAME и -nSIGNUM даже если соответствующие программы не поддерживают соответствующие сигналы;
  • В Posix режиме теперь включена «shift_verbose» опция;

Новое в библиотеке readline:

  • Неинкрементирующий поиск в vi-режиме ('N', 'n') теперь может искать шаблон оболочки в соответствии со спецификацией Posix (при доступности используется fnmatch());
  • Доступны новые назначаемые команды «next-screen-line» и «previous-screen-line», которые перемещают курсор в тот же самый столбец следующей или предыдущей строки соответственно;
  • Доступны дефолтные привязки клавиш для control-arrow-key комбинаций;
  • Отрицательный аргумент "-N" команды quoted-insert теперь означает вставку следующих N символов используя quoted-insert;
  • Новая публичная функция rl_check_signals(), которая позволяет приложениям отвечать на сигналы, которые ловит readline пока ожидает ввода используя кастомную функцию чтения;
  • Теперь доступна проверка условий относительно версии readline прямо в файле inputrc; Для этого была внедрена своя собственная реализация сравнения: поддерживаемые операторы «равно» и «неравно», строковые переменные могут сравниваться с числами, двоичные переменные должны сравниваться с «on» и «off», имена переменных от операторов отделяются пробелами;
  • Библиотека для раскрытия истории теперь понимает замену команд и процессов, расширенную универсализацию и позволяет появляться им где угодно в словах;
  • Библиотека истории теперь содержит новую переменную, которая разрешает приложенгиям устанавливать начальное состояние закавычивания, таким образом состояние закавычивания может наследоваться от предыдущей строки;
  • Новая публичная функция rl_set_keymap_name() для установки и использования определяемых приложениями имён раскладок;
  • Клавиша «Insert» на цифровом блоке, если доступна, теперь переводит readline в режим перезаписи;

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Встроенная команда «wait» теперь ждёт создания замены последнего процесса;

Перевод гугль-траслятором?

Интересно, они догадаются сделать когда-нибудь, чтобы «wait» ожидал любой из запущенных фоновых процессов, а не все/указанные? Сразу станет не нужным рекламируемый TC-ом «parallel».

vodz ★★★★ ()
Ответ на: комментарий от saahriktu

Нет.

Ну так может объясните хотя бы вот первую строку? На лицо дословный перевод первых попавшихся значений слов, без учёта, что на русском получается набор слов.

Его рекламирую не я.

Да ладно. А кто же ещё так усиленно постит их переодичные версии. Ваш робот для постинга сюда новостей?

vodz ★★★★ ()
Ответ на: комментарий от vodz

На лицо дословный перевод

Как будто бы он может быть другим в новостях. Чтобы переводить иначе нужно знать что именно пытался выразить автор Changelog'а. А кто же знает о чём он там пишет?

А кто же ещё так усиленно постит их переодичные версии

Бывший bodqhrohro_promo же, который теперь Moondancer.

saahriktu ★★★★★ ()

«bind -r» теперь проверяет связана ли указанная последовательность прежде чем связать её с NULL'ом во избежание создания раскладок для многоклавишных последовательностей

Автор новости вообще хоть примерно понимает, о чём пишет?

anonymous ()

Есть какой-нибудь обзор на разновидности линуксового CLI? Сам ничего не буду пробовать, Патрик за меня решает, но интересно чем отличаются?

perl5_guy ()
Ответ на: комментарий от nikolnik

poweshell

Решил как-то попробовать. Пробовался от синтаксиса, а также от скорости запуска на виртуалочке под оффтопиком (!). Серьезно, запускается дольше, чем гуйня на питоне, которую я там тестировал.

А ещё вот эти вот свистоперделки вроде подсветки команд искаропки. Серьезным людям такое не нужно, а хипстерские могут и в башке себе такое наладить.

Хау ноу для виндузятников ваш повершелл.

ArkaDOSik ()

В CRUX задумывали перейти на dash, поставляется в core/* из коробки, но дальше глухо. Никакого /etc/skel, который бы ставил dash оболочкой по-умолчанию для «юзеров» (CRUX и «юзер» в одном предложении, ха, смешно). Никаких рекомендаций в официальной документации типа ставьте useradd -s /bin/dash и будет счастье. Ничего. Только один комментарий, объясняющий, почему ещё не выпилили bash: это ж придётся все /etc/rc* скрипты переписывать и ещё не факт что оно взлетит. О как. И короче говоря bash так и остался в CRUX шеллом по-умолчанию, а dash курит в сторонке и никто на него внимания не обращает. ХЗ, стоило ли вообще делать движения в сторону других шеллов.

Башизмы, говорят, плохо. В целом я согласен, задроты которые дрочат на POSIX shell и так найдут способ адаптировать свои скрипты под всё и вся, а пишут то в основном на bash. bash есть в любой системе из коробки. Ну зачем с ним бороться то? Пусть станет стандартом де-факто и всё! Зачем ругать его что он такой, сякой и пытаться избавиться. Причём абсолютно безуспешно.

Короч bash рулит. А хотите чего-то большего и правильного, это в сторону ЯП надо смотреть: perl, python, haskell и тыды.

Spoofing ★★★★★ ()
Ответ на: комментарий от ArkaDOSik

Ну на скорость пофиг, если честно, это же скрипты. А если в баше поменять синтаксис, он все равно будет фигней из 80х (тот же фиш, который я для интерактивных комманд использую), в повершелле ты между пайпами передаешь полноценные объекты, а не текст, это и есть киллер-фича, ну и интерполяция с дотнетом. Короче, мне норм.

nikolnik ★★★ ()
Последнее исправление: nikolnik (всего исправлений: 1)

Встроенная команда «umask» теперь позволяет указывать режимы и маски больше чем восьмеричное 777;

а нафига? лепить uid/gid в umask - странноватая идея

ananas ★★★★★ ()
Ответ на: комментарий от nikolnik

в повершелле ты между пайпами передаешь полноценные объекты, а не текст

Для таких вещей есть Python. Зачем это оболочке? Powershell как был говном после своего создания, так им и остался, и MS не собирается исправлять все его генетические болячки. Многословность с дебильным синтаксисом, неинтуитивность, тормознутость (шелл, стартующий несколько десятков секунд???).

Black_Shadow ★★★★★ ()
Ответ на: комментарий от Moondancer

Киллер-фича parallel — не распараллеливание как таковое, а сбор вывода в правильном порядке.

Логгинг через дескриптор на процесс в основном процессе параллелизатора дело не сложное даже на bash. Основная проблема bash в том, что чисто системно сделать wait с ключём — ожидать любой из предложенного списка фоновых процессов сделать внутри C-программ не сложно, так как это поведение этого сискола по умолчанию, а вот из bash-скрипта принципиально не возможно без тупого цикла проверки статуса списка задач и идиотского sleep.

vodz ★★★★ ()
Ответ на: комментарий от Spoofing

bash есть в любой системе из коробки.

Какое самое ходовое применение linux по количеству? Андроиды, рутеры, телевизоры и прочие холодильники с wifi. А там как раз bash-а зачастую и нет.

vodz ★★★★ ()
Ответ на: комментарий от Black_Shadow

То, что делается на питоне тонной кода, делается парой строчек на ps, и да, там все команды построены по принципу Глагол-Существительное, Get-ChildItem, но есть алиасы для тех, кто не осилил интелисенс - gci. И вы допускаете очень грубую ошибку. Вы думаете, что вам кто-то что-то должен, например майкрасофт, например изменить команды шелла, а вам никто ничего не должен :), есть исходный код, не нравится - меняйте. На данный момент, это, пока, самый совершенный инструмент конкретно в этой области. Питон я для другого использую.

nikolnik ★★★ ()
Ответ на: комментарий от nikolnik

То, что делается на питоне тонной кода, делается парой строчек на ps

Пример? Давай реальный пример кода.

есть алиасы для тех, кто не осилил интелисенс - gci

Это далеко не единственная проблема.

И вы допускаете очень грубую ошибку. Вы думаете, что вам кто-то что-то должен, например майкрасофт, например изменить команды шелла, а вам никто ничего не должен :)

Нет, это ты допускаешь ошибку. Ты почему-то решил, что это говно должно быть мне нужно. Да мне плевать на powershell, потому что я знаю инструменты гораздо лучше. Мне не нужен ни powershell, ни microsoft. И уж тем более мне не нужно, чтобы microsoft там что-то менял в powershell.

На данный момент, это, пока, самый совершенный инструмент конкретно в этой области.

На данный момент - это плохой интсрумент. Он плохо работает. Я уже говорил. Шелл, стартующий несколько десятков секунд? Нахрен такое счастье.

Black_Shadow ★★★★★ ()
Ответ на: комментарий от Black_Shadow

Ты почему-то решил, что это говно должно быть мне нужно

Ну, во-первых, не надо мне тыкать. Во-вторых, где я решил, кому что-то нужно? Я же никого не заставляю использовать. Если нравится продлжать есть кактус, авкать, грепать, экситкоды проверять - да пожалуйста.

nikolnik ★★★ ()
Ответ на: комментарий от CYB3R

Попробуй zsh, базарю, ещё захочешь.

Чтобы было удобно - надо его настраивать. И не только на локалхосте, а везде куда есть доступ. А он не везде стоит и не везде есть права на установку.

Нет такой проблемы?

А вот zsh в sysresccd по умолчанию меня печалит - всегда на bash переключаюсь.

Tanger ★★★★★ ()
Ответ на: комментарий от Spoofing

Башизмы, говорят, плохо.

Очень спорный момент, там много всего полезного, в POSIX шелл нет даже массивов и [[ и всяких &>. Тупо удобней и иногда удобней писать менее кривые и более безопасные скрипты.

Да и не башизмы они, а, в основном, ноги растут из ksh.

bash есть в любой системе из коробки

Не в любой.

pawnhearts ★★★★ ()