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 ()

Ответ на: комментарий от DonkeyHot

Пайпать в павершелле можно из/во внешние программы без проблем. Только это так себе пайпанье, просто текст, как в баше.

По-правильному будет сделать модуль к ПШ, которые добавляет соответствующие жизненной ситуации командлеты. По-правильному^2 — сделать своё пространство имён, как это сделал, например, цитрикс. Тогда используя навыки работы с файлами (типа Get-Childitem) можно ковыряться в цитриксовой инфраструктуре даже без специальных цитриксовых командлетов.

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

По-правильному ... добавляет соответствующие жизненной ситуации командлеты

Это только для оптимистов правильно. Пессимисты думают, что если модуль А может поломать память модулю Б (что, как я понимаю, dll-ке, вгруженной в п/ш вполне доступно), то ну её нафиг, текст парсить - не корки дебажить.

Т.ч. вероятно «правильным» было бы определить какой-то yaml официальным форматом выхлопа, грепам прикрутить jquery вместо regexp, и т.п.

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

dll-ке, вгруженной в п/ш вполне доступно

Этот dll не что иное как MSIL сборка с CLR байткодом который по определению «управляемый». Поломать может если вовсю будет использовать p-invoke но поломать с дуру можно и органы.

VKraft ()
Ответ на: комментарий от pihter

Долго пытался понять при чем тут шареная память, потом врубился: ты думаешь что передача объекта с методами - это передача кода. Напомнило как я в начале изучения C++ думал что каждый объект хранит код всех методов.

Всё и везде делается, хоть памятью хоть пайпами. Просто в PS это уже сделано, а для баша ты долго будешь писать утилиту, а потом заметишь что сам баш уже не нужен, а ты написал аналог PS.

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

Долго пытался понять при чем тут шареная память, потом врубился: ты думаешь что передача объекта с методами - это передача кода. Напомнило как я в начале изучения C++ думал что каждый объект хранит код всех методов.

Неправильно ты врубился: я так не думаю.

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

И что мешает такое же реализовать средствами баша?

Автомат есть должным образом усовершенствованная мотыга

Это демагогический аргумент.

Если такое реализовать средствами баша, то получится павершелл. Или пайтон.

Нет не получится. Обратная совместимость с башем будет.

А мешает окружение GNU, которое придётся целиком переделывать под новые пайпы

Вот мы уже дошли и дошли до того, что не баш виноват. А уже, гну. Переделывать не придется. Доделывать — мб, мб, даже, какие-то новые написать, но это будет именно то, для чего баш и задумывался, его и задумывалось расширять путем написания новых бинариков.

Выяснилось, что в баше нет декларируемого тобой недостатка, Давай признавай и я пошел чай пить )

Проще забыть про него и написать всё заново. Что и сделали авторы пайтона. И павершелла.

Давай вот постпорим, что баш переживет твой павершелл? ты оставил без внимания мой довод о том, что нет смысла учить павершелл, потому что он принадлежит майкрософту, а они все закапывают мгновенно по меркам опенсорса

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

Вот мы уже дошли и дошли до того, что не баш виноват.

Ты, вероятно, с кем-то споришь, устанавливаешь правоту и ищешь виноватых. Я же просто рассказываю, почему мне не удобен баш — он пайпит текст. Не только между гнушными программами. Но гну — необходимый минимум, без него (или его замены) у шелла шансов на широкое применение нет.

Павершелл опенсорсный, так что он гарантированно переживёт нас обоих.

muon ★★★ ()
Последнее исправление: muon (всего исправлений: 1)
Ответ на: комментарий от muon

Ты, вероятно, с кем-то споришь

Ну разумеется

Я же просто рассказываю, почему мне не удобен баш

Оригинальный подход, тогда молчу — рассказывай что хочешь

Павершелл опенсорсный, так что он гарантированно переживёт нас обоих.

ага, ну посмотрим. ставлю щелбан, что не переживет своего 15-летия

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

Павершелл опенсорсный, так что он гарантированно переживёт нас обоих.

Он никому не нужон кроме жирных корпорастов т.к. только они видят смысл его применения. Дотнот, на котором крепится флагшток паверщели в силах сопровождать только микрософт и сам мощношел тоже резон пилить только микрософту. Поверщель глюкав с багов и родовых травм не позволяющих ему нормально интегрироватся в юникс системы, с кучами нинужных и унылых модулей дублирующих функционал и армией индусов во главе с Сатьей. Зокопать его но видимо поздно как и с нинужноД.

anonymous ()
Ответ на: комментарий от muon

запускается бинарь-комбайн

У тебя виндовс головного мозга.
Это твой powershell тормознутый «бинарь-комбайн» в который стараются впихать всё что можно.

find же занимается только одной вещью - поиском по файловой системе, плюс может на каждый найденный объект запустить внешнюю команду.

Это и называется UNIX-way. Делать что-то одно, но хорошо.

WatchCat ★★★★ ()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от pihter

>нет смысла учить павершелл

... потому что ... все закапывают мгновенно

Это плохой аргумент. Желание учиться только 1 раз в жизни обосновано только при учёте только 1 из факторов, присутствующих в реальности, т.ч. оптимистично за пределами разумного.

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

>find же занимается только одной вещью

Занимался, пока там не было -delete. Впрочем, его наличие - проблема не find-а, и не sh-а, а программ, не умеющих принимать аргументы из stdin-а, и многочисленных определений конца строки.

DonkeyHot ★★★★★ ()
Ответ на: >find же занимается только одной вещью от DonkeyHot

пока там не было -delete

Этот мелкий «недостаток» мы опустим.

не умеющих принимать аргументы из stdin-а, и многочисленных определений конца строки.

Ну да, могли бы допилить rm, но решили сделать так ¯\_(ツ)_/¯

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

могли бы допилить rm

Похоже, правильная реализация rm - слишком сложная для человечества задача. из п/ш доки:

Remove-Item ... System.String ... You can pipe a string that contains a path, but not a literal path, to this cmdlet

Они это серьёзно?

DonkeyHot ★★★★★ ()
Последнее исправление: DonkeyHot (всего исправлений: 1)
Ответ на: >find же занимается только одной вещью от DonkeyHot

Занимался, пока там не было -delete. Впрочем, его наличие - проблема не find-а, и не sh-а, а программ, не умеющих принимать аргументы из stdin-а, и многочисленных определений конца строки.

Судя по всему, с новой версией топика find уже утрачивает свою нужность. Это произошло и с «test» и «expr», удивительно, что до сих пор есть примеры юзанья «cut», хотя sh-ы намного удобнее в виду грамотного парсенья разделителей с самого рождения...

vodz ★★★★ ()
Ответ на: >нет смысла учить павершелл от DonkeyHot

нет смысла учить павершелл

... потому что ... все закапывают мгновенно

Это плохой аргумент.

Это — отличный аргумент. Становишься взрослее — времени на самообучение становится все меньше. Стало быть это время ценнее. А все знания, что я добыл по виндам — сейчас даром никому не нужны. Они уже и семерку закопали, а мои ХРеновые знания что есть, что нет.

А все, чему я научился в мире линукс — актуально по сей день. Чем дольше учусь — тем круче специалист.

Желание учиться только 1 раз в жизни обосновано только при учёте только 1 из факторов, присутствующих в реальности, т.ч. оптимистично за пределами разумного.

ЯННП :)

pihter ★★ ()
Ответ на: >find же занимается только одной вещью от DonkeyHot

программ, не умеющих принимать аргументы из stdin-а, и многочисленных определений конца строки

а зачем это программам, когда есть xargs, идущий в комплекте с find-ом

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

У тебя режимы только спорить и молчать?.. Тогда рассказываю: 15-летие ПШ случится меньше, чем через три года.

А какие достопримечательности есть в Красноярске?

muon ★★★ ()
Последнее исправление: muon (всего исправлений: 1)
Ответ на: комментарий от WatchCat

Делать что-то одно, но хорошо.

А что find делает хорошо, ищет или удаляет?

Можешь не отвечать, я знаю, что удаляет он фигово: на нескольких десятках тысяч файлов падает с ошибкой «слишком много аргументов» (sic!). И да, это случай из моей практики, еженедельно нужно было удалять старые аудиозаписи.

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

У тебя режимы только спорить и молчать?

Нет, разумеется. Просто мы второй день что-то обсуждаем, а ты в итоге говоришь что это не спор, а просто твое мнение. Ну мнение и мнение, что на это сказать еще?

Тогда рассказываю: 15-летие ПШ случится меньше, чем через три года.

Ну, если доживет, значит я проспорю щелбан )

А какие достопримечательности есть в Красноярске?

Это смотря что тебя интересует. Этой зимой будет всемирная зимняя универсиада. Елку построили, говорят, самую большую на континенте. У нас прям под городом заповедник Столбы. На мой взгляд — жемчужина. Зоопарк толковый по сибирским меркам. Ну там тетр-музей — все в наличии. Часовня, мост и ГЭС с десятирублевой купюры )

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

Становишься взрослее — времени на самообучение становится все меньше

Видать, у тебя опыта взросления ещё не хватает :) Чуть дальше оно с точностью до наоборот. А ещё, говорят, учение чего попало замедляет усыхание мозгов, что ещё увеличивает доступное время.

Т.ч. учиться*3, как завещал какой-то Ленин.

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

Видать, у тебя опыта взросления ещё не хватает

Не такая уж и плохая новость )

Чуть дальше оно с точностью до наоборот

Хорошо бы. Мне остро не хватает

А ещё, говорят, учение чего попало замедляет усыхание мозгов, что ещё увеличивает доступное время.

Зачем чего-попало-то? Много всего безусловно-толкового есть, и на него-то не хватит отпущенного века. Буду я еще всякие чегопопалы учить

Т.ч. учиться*3, как завещал какой-то Ленин.

Ленин дело завещал, только он это завещал про дельную учебу, ради достижения целей, а не про учебу ради учебы

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

зачем это программам, когда есть xargs

for(i=1;i<argc;i++) do(argv[i])

ничем не лучше

while(arg=fgets()) do(arg)
но по минимум 3м параметрам хуже(память, синхронность, пробелы). Почему сразу не сделать бы «правильно»? Было бы:
glob *.* | rm
Да, на пару символов длиннее, но гораздо приятнее в интерактивном режиме что-то поправить, проверить. Попробуй сделать с argv-прогой что-то такое:
glob *.* | less ## q<UP>^Wsort | less
glob *.* | sort | less ## q<UP>^Wgrep... | less
glob *.* | sort | grep -xvЕ "а|это|ещё|нужно" | less ## q<UP>^Wrm
glob *.* | sort | grep -xvЕ "а|это|ещё|нужно" | rm

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

Вот. Но это не проблема, т.к. если передавать по пайплайну объекты, возвращаемые Get-[Child]Item, то будет как раз использоваться LiteralPath без каких либо проблем со специальными символами.

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

Бла бла пайпы, объекты.. Аналог find в студию из павершела. И не надо только вскукареков о возможности принимать stdout от нативных приложений (это потом надо обрабатывать и превращать в объекты чтобы «вращать» внутри дотнота) т.к. внешние приложения в контексте обработки данных для павершелл чужеродны. ПредлОжите пилить модулей? Но зачем когда нужно лишь грамотно програмировать на sh/bash/perl/python/....

anonymous ()
Ответ на: комментарий от pihter

все, чему я научился в мире линукс — актуально по сей день

Пусть ты те имел дела с иксовыми приложениями.

Но как же системы инициализации? или ты сразу пришёл на systemd?

И скрипты на python2 не писал?

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

Аналог find в студию из павершела

Лол, это же вечный аргумент виндузятников из нулевых. «А где в этом вашем линуксе аналог AD? а панели управления? а антивируса? нету?.. ну и говно ваш линукс!»

Здоровым людям обычно понятно, что инструмент подбирается под задачу, а не чтоб было «как в винде» или «как в линуксе». Есть у тебя такая задача? Найти файлы? man Get-Childitem. Удалить файлы? man Remove-Item. И пайп между ними.

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

Болен здесь ты т.к. find в винде отстой как и весь комманд-лайн туллинг и чтоб как-то скрасить унылость был задезигнен павершел, который сейчас кое-где протаскивают в линукс. Твои повершеловские примеры Get-*Item по сравнению с возможностями find тоже нервно курят и чтоб такое реализовать в powershell необходимо использовать в паверщели внешние утилиты либо реализовывать модули что сводит к 0 - 0.2 от 1 полезность инструмента который тащит дотнот в систему при этом жестко сливает нативным утилитам. Fershtein?!

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

Что «такое»-то? Как раз find - убогий комбайн, для которого надо помнить отдельные аргументы. В PowerShell все делается однообразно через пайплайн: Найти свежие файлы:

gci -Recurse | where {$_.LastWriteTime.Date -gt [System.DateTime]::Now.AddDays(-5)}
Найти процессы, которые жрут много памяти:
Get-Process | where {$_.WorkingSet -gt 100000*1024}
и так далее. Не надо для каждой отдельной команды учить синтаксис, все однообразно и даже более юникс-вейно. И еще когда все это набирается, выдаются адекватные подсказки.

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

Вот эти атрибуты(поля) каждого объекта получаемые при вызове Get-ChildItem:

PSPath PSParentPath PSChildName PSDrive PSProvider PSIsContainer Mode BaseName Target LinkType Name FullName Parent Exists Root Extension CreationTime CreationTimeUtc LastAccessTime LastAccessTimeUtc LastWriteTime LastWriteTimeUtc Attributes

А теперь набираем «man find» и смотрим насколько больше возможностей по «TESTS» (например принадлежность пользователю/группе) и _втроенным_ «ACTION»(что влияет на производительность операций).

anonymous ()
Ответ на: комментарий от DonkeyHot

glob *.* | rm
Да, на пару символов длиннее, но гораздо приятнее в интерактивном режиме что-то поправить, проверить.

Только одно маааленькое но: интерактивный режим это и есть взаимодействие через стандартный ввод, который вот вы взяли и заняли пайпом, да ещё и не понятно, вот этот rm при нетерминальном вводе должен пытаться через пень колоду взаимодействовать с пользователем или как обычно при таком вызове все интерактивные программы превращаются в неинтерактивные, например, less в cat.

Какой же типичный подростковый нигилизм, все старики - идиоты, надо взять и всё переделать без понимания сути почему сделано именно так и почему по другому будет только хуже.

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