LINUX.ORG.RU

Вышел Bash 3.1


0

0

9 декабря вышла новая версия Bash.

Краткий список изменений:

+ Новая версия bash может быть собрана для обеспечения строгого соответствия стандарту POSIX по умолчанию, используя новую опцию для configure.

+ Оператор присваивания += (дополняет значение строки или массива) теперь поддерживается для присваивания выражений и аргументов для встроенных комманд, которые принимают присваивание выражений.

+ Встроенная функция printf имеет новую опцию: -v var. Это позволяет поместить вывод в переменную вместо stdout.

+ Новая опция интерпретатора: nocasematch. Если она установлена, то, сравнение по шаблону игнорирует регистр, когда используется с командами case и [[.

* Множество других исправлений.

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

★★★★

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

>А в баше есть перебор? % ls ~<TAB><TAB> - что будет?

Будет список домашних каталогов пользователей.

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

>теперь усложним задачу и вместо less подставим grep, каковой уже требует аргументов

Не удалось. bind 'Control-g:"|grep "' и вводи себе аргументы, сразу после "C-g".

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

to ananas: === А если у тебя есть какой-нить скрипт, который писал не ты, и в котором будут перекрываться такие определения???

не путай скрипты и интерактивную работу === Да я и не путаю. Какой же он тогда глобальный. :)

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

> Не удалось. bind 'Control-g:"|grep "' и вводи себе аргументы, сразу после "C-g".

а в истории это сохранится?

ananas ★★★★★
()

Круто, скоро си будет не нужен... ;-)

atrus ★★★★★
()

Кстати, в новой версии инициализация нескольких локальных массивов в
одной строке типа local -a foo=() bar=() приводит к ошибке (и ломает
инитскрипты gentoo кстати). Будьте бдительны.

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

Алиасы в bash есть. Но алиасы это зло, их употребление надо минимизировать. Если лень набирать какой нибудь ключ, сделай скриптик, и используй его, труда столько же, работа более безглючна

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

Machines should work. People should think

> еще в zsh есть автометическое исправление команд,

Ну его в пень, _думать_ надо, что пишешь.


> я например часто ошибаюсь и пишу apt-get intsall

И что? Настоящий глюк вида

rm -rf ~/ tmp/*  
        ^ ^^

все равно ни один shell не отловит, в общем, думать _надо_.

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

> Как при чем? Ты же говоришь "русские имена каталогов и файлов зло"

ну ради музыки/фильмов можно сделать исключение ;) как никак с ними из консоли работать не приходится

JB ★★★★★
()
Ответ на: Machines should work. People should think от Dselect

> все равно ни один shell не отловит, в общем, думать _надо_.

в синтаксисе команд я никогда не ошибаюсь, почти ;) а вот очепятки делаю часто

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

> Потом читай маны до просветления.

по умолчанию zsh работает как не posix шелл

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

Но алиасы это зло, их употребление надо минимизировать.

<почему?>

Я думаю, мне достаточно сказать, что это практически цитата из руководства баша.

У алиасов достаточно непрозрачное и следовательно неочевидное применение в ситуациях чуть сложнее тривиальных.

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

> % ls ~<TAB><TAB> - что будет?
будет список поддиректорий в текущей. Сложно набрать bash и самлму посмотреть ?

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

> У алиасов достаточно непрозрачное и следовательно неочевидное применение в ситуациях чуть сложнее тривиальных.

В чем это выражается ? Ну и что ?
Чем это мешает использовать alias в ситуациях не сложнее "тривиальных"?

szh ★★★★
()

Отличный флейм, наконец-то! А то KDE vs GNOME уже достало.

А это читается почти как роман :)

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

> в синтаксисе команд я никогда не ошибаюсь, почти ;)
> а вот очепятки делаю часто

Вот именно об этом речь и шла. Синтаксически та команда, которую я привел,
правильная... Но вот результат... немножко отличается от задуманного.
Так что пускай таки машина делает, что ей человеком сказано, а человек
думает, что говорит...

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

> Как при чем? Ты же говоришь "русские имена каталогов и файлов зло"

Таки зло, бОльшее зло может быть только одно: русские буквы в URL'ах.

> ну ради музыки/фильмов можно сделать исключение ;)

А лучше таки не надо.

> как никак с ними  из консоли работать не приходится

Это почему же?

mplayer -vo mga 

:)

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

"Компьютер делает то, что вы ему скажете, а не то, что вы хотите" (С) Не-помню-кто/где

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

> Чуваки поставьте GNOME

И что, какие файлы удалять, а какие нет, будет решать эта гм... поделка?
Вот радость-то...

>там все с кнопочками :)

Шагом марш сюда: http://antigreen.org/bioreactor

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

>Чуваки поставьте GNOME там все с кнопочками :)

А какже POSIX ??? ;)

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

>Таки зло, бОльшее зло может быть только одно: русские буквы в URL'ах.

На мой взгляд эта точка зрения устарела.

Да раньше ОС и софт "слабо" и разномастно поддерживали русские буквы в именах файлов и т.д.

А сейчас ИМХО ситуция изменлась наоборот и соотвественно...

fghj ★★★★★
()

Я не могу жить без таких вещей в zsh как:
1. Очень продуманное автодополнение, может быть в bash это можно настроить, не знаю, в zsh копируешь стандартный конфиг и всё работает. Конкретно:
- перебор вариантов tab-ом, т.е. есть я набрал cd ./www/cm и в папке www есть подпапки cmc и cmc2 то первый tab дополняет до cmc а второй, третий и тд. автоматом доставляют по очереди '' и '2'. Не знаю, может меня назовут лентяем, но я эту возможность часто использую.
- правильное дополнение конструкций типа cp ./{a,b<tab>, когда я использовал баш в последний раз, он такое не осиливал.
- очень удобная вещь - промпты у меня например слева стоит просто знак % а справа - последние 20 символов в текущем пути.
- субъективно - он знает практически про все параметры известных программы, по крайней мере я частенько вместо того, чтобы писать --help жму 2 раза <tab> и читаю краткие описания опций. Да и apt-ca<tab>se<tab> набирать заметно быстрее чем apt-cache search.

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

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

>ну например набираешь /us/sr/lin, нажимаешь tab и путь дополняется до /usr/src/linux, очень удобная фича

Ну давай посчитаем:

zsh: /us/sr/lin<tab> = 11 нажатий

bash: /us<tab>sr<tab>lin<tab> = 11 нажатий

ваши комментарии...

PS. а если в /usr есть каталоги src/linux и srd/linups ??? что выдаст zsh?

anonymous
()

Да, ещё, забыл, присоединяюсь к предыдущим ораторам - без автокорректирования ошибок жить не могу ;-) Очень радует, когда atpitude молча исправляется на aptitude.

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

> ваши комментарии...
В zsh можно (я по крайней мере так делаю) набирать и таким образом.

> PS. а если в /usr есть каталоги src/linux и srd/linups ??? что выдаст zsh?
дополнит до linu (если нету linax-а :-)) и отсутствием автоподставляемого пробела в конце даст понять, что есть несколько вариантов. Далее несколькими нажатиями <tab>-а выбираем нужный каталог и всё.

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

<лично мне уже тяжело жить без глобальных альясов, menu completion, настроенных dirstacks, cdpath, buffer stack (ESC-Q).>

Коротко объясни что такое menu completion, dirstacks, cdpath, buffer stack. Алиасы уже сказали, что в баше есть, cdpath тоже есть.

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

>ломает инитскрипты gentoo

Спасибо, что сказал. Теперь понятно, откуда столько траблов навылезало :(

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

<В чем это выражается ? Ну и что ? Чем это мешает использовать alias в ситуациях не сложнее "тривиальных"?>

Вот тебе весь кусок из руководства баша про псевдонимы:

Псевдонимы позволяют строке использоваться вместо слова, когда они используются, как первое слово простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и возвращены в исходное состояние встроенными командами alias и unalias.

Первое слово каждой простой команды, если незаэкранированно, проверяется чтобы увидеть, имеется ли псевдоним. Если так, то слово заменяется текстом псевдонима. Имя псевдонима и текст замены могут содержать любой правильный(допустимый) ввод оболочки, включая метасимволы оболочки , за исключением того, что имя псевдонима не может содержать `='. Первое слово текста замены проверяется на псевдонимы, но слово, которое является идентичным расширяемому псевдониму, не расширяется второй раз. Это означает, что может быть псевдоним ls к "ls -F", например, и Bash не пробует рекурсивно развернуть текст замены. Если последний символ значения псевдонима - пробел или cимвол табуляции, то следующее управляющее слово, следующее с псевдонимом также проверено для расширения псевдонима.

Псевдонимы создаются и перечисляются командой alias, и удаляются командой unalias.

Нет никакого механизма для использования параметров в тексте замены, как в csh. Если параметры необходимы, должна использоваться функция оболочки (см.раздел Функции Оболочки ).

Псевдонимы не расширяются, когда оболочка - не интерактивна, если expand_aliases опция оболочки не установлена, используя shopt (см. раздел Bash Встроенные Команды).

Правила относительно определения и использования псевдонимов несколько запутывающие. Bash всегда читает по крайней мере одну законченную строку ввода перед выполнением любой из команд на этой строке. Псевдонимы расширяются, когда команда читается, но не когда она выполняется. Поэтому, определение псевдонима, появляющееся на той же самой строке, как и другая команда не вступает в силу, пока следующая строка ввода не читается. На команды, следующие за определением псевдонима на той же строке не воздействует новый псевдоним. Это поведение - также решается, когда функции выполняются. Псевдонимы расширяются, когда функциональное определение читается, но не когда функция выполняется, потому что функциональное определение - самостоятельная составная команда. Как последствие, псевдонимы, определенные в функции - не доступны, пока эта функция не выполняется. Для безопасности, всегда помещайте определения псевдонима на отдельной строке, и не используйте alias в составных командах.

Для почти каждой цели, функции оболочки предпочтительнее псевдонимов.

P.S Перевод мой собственный, за качество прошу не пинать :ъ)

argin ★★★★★
()

Поиск в истории с использованием русских символов (C-r) исправили наконец? Который год из-за этой баги мучаюсь, и все до сих пор пофиксить не могут...

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

AI — давить!

> Да, ещё, забыл, присоединяюсь к предыдущим ораторам - без 
> автокорректирования ошибок жить не могу ;-)

"Исправление" команд, "Вы уверены, что хотите удалить этот файл?",
равно как и прочие претензии на наличие мышления -- в биореактор.

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

> Коротко объясни что такое menu completion, dirstacks, cdpath, buffer stack. Алиасы уже сказали, что в баше есть, cdpath тоже есть.

ну что, так тяжело сходить по ссылке и почитать 20 минут, надо других напрягать?

menu completion позволяет получить меню с вариантами комплишна, выбор варианта - курсором. При грамотной настройке делает mc практически ненужным. Попробуй забиндить

bindkey "^Z" menu-complete
bindkey -M menuselect "/" accept-and-infer-next-history
bindkey -M menuselect "," accept-and-menu-complete

Получится нормальный такой браузинг по каталогам и выбор файлов запятой.

directory stack думаю в баше есть, это просто стек из путей. Можно запихнуть в стек текущий путь, можно вытолкнуть, можно перейти по списку. Можно настроить по всякому, например чтоб путь автоматически запихивался в стек после каждой смены каталога. Вместе с menu completion позволяет делать такие вещи:

cd /usr/foo/bla/bar
[...]
cd /some/where/else
cp myfile <alt-d>

и тут волшебным образом появляется список всех посещённых каталогов в историческом порядке. (соответствующий скрипт могу выдать если надо).

cdpath - просто список путей. Продолжая пример выше я могу сделать

cdpath = ( /usr/foo/bla /some/where )

и после этого cd bar; cd else; будут работать откуда угодно

buffer stack позволяет запихивать текущий буфер редактора в стек. Пример:

rm -rf /
тут вместо enter жмём esc-q, получаем чистое приглашение.
wall goodbye, world!<enter>
и вот тут получаем обратно свою строчку с rm, остаётся нажать enter.
Аналогично есть ещё esc-h, который в этом случае запустит нам man rm и потом вернёт обратно к набраной команде.

В zsh ещё очень много чего есть, эти примеры - один процент, советую всё-таки почитать по ссылке.

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

1) Я ведь нна расстоянии воздействовать не умею

2) если нет времени - то смотри 1), но раз ответил - спасибо.

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

cdpath и directory stack в баше есть.

У баша есть очень продвинутое программируеммое автодополнение, и можно не сомневаться, что способ запрограммировать автодополнение меню явно существует. Кто-то это реализует, другие просто скопируют файл настроек.

Вот только насчет глобальных алиасов и buffer stack ни чего сказать не могу. Но Баш очень продвинутая и большая оболочка, и если я чего то не знаю, не значит, что этого там нет.

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

> ваши комментарии...

до таба надо еще дотянуться, мне проще быстренько набить и потом жать таб

> PS. а если в /usr есть каталоги src/linux и srd/linups ??? что выдаст zsh?

первый таб выдаст src/linux, следующее нажатие выдаст srd/linups

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

Тут ещё дело в том, что при больших путях число вариантов сокращаеться, в баше бы пришлось по табу вибирать на каждом уровне из нескольких вариантов, а в zsh не надо.

Хочу открыть напрмер sicp. Ксатит вот ещё фишка zsh(только ли zsh?) можно открывать файлы не вводя имя программы. И ещё по каталогам также ходит без cd. Файл: ~/doc/programming/scheme/sicp.ps

В zsh я пишу: ~/d/p/s/si<TAB> - итого 11 нажатий

В bash: ~/do(потомучто у меня есть ещё каталог dis)<TAB>pr(Есть каталог palm)<TAB>sc<TAB>si<TAB> - итого 14. Но это с учётом того, что я помнил что у меня есть каталог dis и palm, иначе бы мне сначало пришлось посмотреть, что они есть, добарать одну букву, вообщем времени ушло бы больше.

Да и вообще много таких мелких удобностей. Исправления те-же, понятно, что если делаешь что-то деструктивное сначало нужно хорошо подумать, но если обычные команды вводишь, почему-бы и не положиться на автоисправление.

CrazyPit ★★★
()

Собственно не хватает башевого autocompletion.
потому как автоматическое вычитывание ~/.ssh/known_hosts при ssh/scp, подсказки при mount somehost: <tab>, дополнения к известным софтинам, автодополнение к debian/gentoo и прочим distro-related утилиткам, подсказки налету через ./configure -- <tab> , при наборе cd /etc/ba <tab> покажет именно /etc/bash_completion.d/ , безо всяких там bash.bashrc, как предлагает сам zsh

В общем привычно это дело. Работает быстро и так как ожидается.

пойду пока почитаю, как можно zsh подкрутить до такого.

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

про buffer stack

> rm -rf /
> тут вместо enter жмём esc-q, получаем чистое приглашение.

А оно надо? Ведь есть

`edit-and-execute-command (C-xC-e)'
     Invoke an editor on the current command line, and execute the
     result as shell commands.  Bash attempts to invoke `$VISUAL',
     `$EDITOR', and `emacs' as the editor, in that order.

UNIX-way, однако :)

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

>zsh все равно лучше

>функциональнее, на нем можно такое вытворять, что башу и не снилось ;)

>ну например набираешь /us/sr/lin, нажимаешь tab и путь дополняется до /usr/src/linux, очень удобная фича

Вижу имидж сменить не удаётся. Как был клоуном, так и остался.

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

OffTopic: про видео/аидио файлы и консоль

>> mplayer -vo mga

> бррр ;)

Очень удобно, между прочим. Можно на CD/DVD с фильмами/музыкой залить
live-CD дистр (что-нибудь вроде Damn Small Linux), урезанный по самые
я..., в частности, без X'ов и Xlib'ов _вообще_ -- но с DirectFB,
mplayer'ом и mpg321. 

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

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

ТАк собственно в Zsh это всё есть

autoload -U compinit

compinit

CrazyPit ★★★
()
Ответ на: про buffer stack от Dselect

> А оно надо? Ведь есть >`edit-and-execute-command (C-xC-e)'

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

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

if test -f $HOME/.ssh/known_hosts; then
        hosts=(${${${(f)"$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*})
        zstyle ':completion:*:hosts' hosts $hosts
fi


Вообщем в .zsh это все очень легко реализуется

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

>Да раньше ОС и софт "слабо" и разномастно поддерживали русские буквы в именах файлов и т.д.

Не в этом дело. При работе под шелом с рускими именами файлов приходится переключать раскладку туда-сюда. Неудобно.

ugoday ★★★★★
()

bash, zsh ... главное ksh ! та-таря-таря-тата

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.