The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз командного интерпретатора Bash 4.2

14.02.2011 11:28

Вышла новая версия командного интерпретатора GNU Bash 4.2.

Из улучшений можно отметить:

  • Для команд declare/typeset добавлена новая опция "-g", при указании которой переменные имеют глобальную область видимости, т.е. видны даже в отдельных функциях;
  • Указание отрицательного индекса массива теперь не приводит к ошибке и воспринимается как обратное смещение от конца массива;
  • Отрицательный размер, указанный в блоке ${var:offset:length} теперь не приводит к ошибке и воспринимается как обратное смещение от конца переменной;
  • В блоки $'...', echo и printf добавлено распознавание escape-последовательностей \uXXXX и \UXXXXXXXX;
  • В команде test/[/[[ добавлена поддержка оператора "-v", который возвращает "истину" в случае установки указанной в качестве аргумента переменной;
  • Команда "time" теперь может использоваться для вывода времени выполнения текущей оболочки (shell) и дочерних процессов;
  • Добавлена переменная FUNCNEST, которая позволяет ограничить уровень вложенности выполняемых функций, что позволяет предотвратить ситуацию бесконечной рекурсии;
  • Во встроенной команде printf добавлена поддержка спецификатора "%(fmt)T", позволяющего указать формат вывода времени в стиле strftime;
  • Выполнение "exec -a foo" теперь устанавливает в переменную $0 выполняемого скрипта имя "foo" без лидирующих знаков "#!";
  • При выполнении во вложенной оболочке (subshell) команд замены, функций и встроенных команд, идентифицирующая trap строка теперь не сбрасывается до момента установки нового trap-а, что позволяет использовать $(trap) для просмотра trap-а вызывающей оболочки;
  • Команда "trap -p" теперь отображает сигналы, игнорированные при запуске bash;
  • Изменен метод разбора POSIX-нотации, который теперь допускает указание в блоках "! time command" нескольких выражений "! time" подряд;
  • Блоки $((...)) теперь всегда разбираются в первую очередь как арифметические выражения (ранее вначале выполнялся разбор потенциально возможного указания вложенных команд);
  • Во встроенной команде mapfile добавлена поддержка третьего аргумента, указывающего на callback-команду, которой будет передан номер последнего элемента заполненного массива;
  • Добавлена новая опция "compat41", включающая режим совместимости с Bash 4.1;
  • Во встроенную команду "cd" добавлена поддержка определенной в POSIX опции "-e";
  • Добавлена новая опция оболочки "lastpipe", позволяющая запустить последнюю команду из конвейера (pipeline) в контексте текущей оболочки;
  • Элементы режима POSIX-совместимости приведены в соответствие со стандартом POSIX 2008.

Изменения в библиотеке Readline:

  • Функции сохранения истории более не пытаются создать файл в текущей директории, если переменная $HOME не установлена, так как это может привести к проблемам с безопасностью в случае, если имя файла истории не определено в приложении;
  • Добавлена новая переменная "completion-display-width", в которой может быть указано число столбцов, используемых для отображения вариантов автозавершения строки;
  • Добавлена новая переменная "completion-case-map", позволяющая определить карту идентичности символов для режима автодополнения без учета регистра, например, уровнять "-" и "_";
  • Добавлена новая переменная "menu-complete-display-prefix", позволяющая определить типовой префикс для приоритетной начальной проверки соответствия элементов меню, который будет использован до цикличного просмотра списков.


  1. Главная ссылка к новости (http://lists.gnu.org/archive/h...)
  2. OpenNews: Вышел BASH 4.1
  3. OpenNews: Анонсирован выход Bash 4.0, лицензия изменена на GPLv3
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/29591-bash
Ключевые слова: bash, shell
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (46) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, bootforce (?), 13:36, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    что за опция -e такая у команды cd?
    http://pubs.opengroup.org/onlinepubs/9699919799/
     
     
  • 2.7, filosofem (ok), 14:46, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    If the -e option is supplied with -P,  and  the  current working directory cannot be successfully determined after a successful directory change, cd will return an unsuccessful status.

    Это из мана. А при чем тут POSIX пока загадка.

     
  • 2.19, pavlinux (ok), 19:15, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cd.html
     

  • 1.4, vadiml (ok), 14:32, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Указание отрицательного индекса массива теперь не приводит к ошибке и воспринимается как обратное смещение от конца массива;

    Лучше поздно, чем никогда

     
  • 1.14, Сергей (??), 17:20, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Если длинна масива 3 элемента, а мы указываем a[-5] , то bash пройдёт по кругу два раза назад, или всё-таки вернёт Exception ?
     
  • 1.15, АнонимАнонимАнонимАнонимАнонимАноним (?), 17:28, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    использую zsh уже 4 года
     
     
  • 2.16, ymsssg (??), 17:39, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А чем ZSH лучше bash? Спрашиваю не подкола ради, но просвещения для.
     
     
  • 3.22, non anon (?), 19:46, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >А чем ZSH лучше bash?

    Всем :-)

    Во-первых, из коробки работает "умное" дополнение практически для всех команд. По сравнению с этим великолепием, bash-completions выглядит жалким огрызком.

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

    В-третьих, коррекция вводимых команд
    $ ehco test
    zsh: correct 'ehco' to 'echo' [nyae]? y
    test
    (можно даже параметры корректировать).

    В-четвертых, можно, например, настроить навигацию по меню дополнения стрелками - скажем, при дополнении команды kill будет красивая менюшка с интерактивным выбором.

    Ну и куча других фич (перечисленное - то, вспомнилось в первую очередь).

     
     
  • 4.28, Анонимъ (?), 20:09, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >[оверквотинг удален]
    > Во-вторых, возможность расшаривания истории команд - вводишь команду в одной консоли, и
    > она тут же появляется в истории всех твоих консолей, включая открытые
    > в данный момент.
    > В-третьих, коррекция вводимых команд
    > $ ehco test
    > zsh: correct 'ehco' to 'echo' [nyae]? y
    > test
    > (можно даже параметры корректировать).
    > В-четвертых, можно, например, настроить навигацию по меню дополнения стрелками - скажем,
    > при дополнении команды kill будет красивая менюшка с интерактивным выбором.

    этими берюльками ты будешь на своём десктопе играться. а на любом нормальном сервере zsh нет и быть не может в принципе (и bash то не всегда есть).  


     
     
  • 5.32, non anon (?), 20:16, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > любом нормальном сервере zsh нет и быть не может в принципе

    Кстати, о zsh на серверах :-)

    # rm -rf /*
    zsh: sure you want to delete all the files in / [yn]? n

     
     
  • 6.39, Ytch (?), 22:25, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >> любом нормальном сервере zsh нет и быть не может в принципе
    >Кстати, о zsh на серверах :-)
    ># rm -rf /*
    >zsh: sure you want to delete all the files in / [yn]? n

    А я-то, дурень, все по-старинке... просто не пускаю идиотов под рутом на сервера.

     
  • 5.40, Michael Shigorin (ok), 22:41, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > а на любом нормальном сервере zsh нет и быть не может в принципе
    > (и bash то не всегда есть).  

    Это у лохов и несчастных.  А у умных и предусмотрительных бывали прецеденты, когда встроенное в zsh помогало выкрутиться, например, при убитой libc.

    2 Ytch: не-идиот тоже бывает уставшим (когда ему тоже лучше не лезть, даже если очень надо), и руки порой могут дать осечку даже при многолетней привычке притормаживать перед энтером.

     
     
  • 6.63, Ytch (?), 00:56, 16/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >не-идиот тоже бывает уставшим (когда ему тоже лучше не лезть, даже если очень надо), и руки порой могут дать осечку даже при многолетней привычке притормаживать перед энтером.

    Ну в подобном случае и запрос подтверждения вполне может не помочь - просто на "автопилоте" нажмешь 'yes'. А может и спасет. Смотря насколько сложна обстановка (усталость, спешка, кол-во спирта в крови и т. п.).

     
  • 5.46, Аноним (-), 05:05, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > этими берюльками ты будешь на своём десктопе играться. а на любом нормальном
    > сервере zsh нет и быть не может в принципе (и bash то не всегда есть).

    Ну куда там до гуру, который в sh без readline вбивал-вбивал коммандочки по буковки, после чего его уволили наxep, так что он пришел зелёных по форумам поучать :))

     
  • 5.68, ill ates (?), 17:04, 22/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > этими берюльками ты будешь на своём десктопе играться. а на любом нормальном
    > сервере zsh нет и быть не может в принципе (и bash
    > то не всегда есть).

    В SLES zsh установлен по дефолту. Как расшифровывается SLES спросишь у мамы

     
  • 3.25, non anon (?), 19:58, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Да, советую почитать еще вот здесь: http://debiania.blogspot.com/2009/07/zsh.html
     
  • 3.69, ill ates (?), 17:07, 22/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > А чем ZSH лучше bash? Спрашиваю не подкола ради, но просвещения для.

    По сравнению с bash удобнее и сильно экономит время, попробуете тормозные удалёнки где даже ssh еле ворочается - сразу поймёте.
    http://habrahabr.ru/blogs/linux/82537/

     

  • 1.17, Анонимъ (?), 18:03, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/

    Bash
    Latest Stable release: 4.2  February 13, 2011
    License: GPL 3


    Z shell
    Latest Stable release: 4.2.7  December 18, 2007
    License: MIT-like


    + bash есть везде от Mac OS X до Solaris из коробки.


    итого, вы голубчик промахнулись, протухло явно zsh.

     
     
  • 2.18, Вова (?), 18:14, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • –6 +/
    set -o vi в руках любителя вим, либо знание емаксовых хоткеев + использование биты ! +  использование !$ и подобных сокращений  - и zsh как-то становится ненужен.
     
     
  • 3.23, non anon (?), 19:47, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > set -o vi в руках любителя вим, либо знание емаксовых хоткеев +
    > использование биты ! +  использование !$ и подобных сокращений  
    > - и zsh как-то становится ненужен.

    Сразу видно человека, который не знает ничего про zsh :)

     
  • 2.24, non anon (?), 19:49, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Z shell
    > Latest Stable release:  4.2.7  December 18, 2007
    > License: MIT-like
    > итого, вы голубчик промахнулись, протухло явно zsh.

    Спасибо, поржал :-)

    $ echo $ZSH_VERSION
    4.3.10

     
     
  • 3.26, Анонимъ (?), 20:04, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • –4 +/
    >Спасибо, поржал :-)
    >$ echo $ZSH_VERSION
    >4.3.10

    потому что кроме как ржать ты ни на что не способен.

    http://zsh.sourceforge.net/FAQ/zshfaq01.html#l6

     
     
  • 4.43, Michael Shigorin (ok), 23:09, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > http://zsh.sourceforge.net/FAQ/zshfaq01.html#l6

    И?  Вы ещё скажите, что mutt-1.5 пользоваться нельзя.

     
  • 2.41, G0Dzilla (ok), 22:42, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет, не везде. В коммерческих UNIX баш обычно не ставится из коробки. Про солярис сейчас точно не скажу, давно не работал, но в AIX точно надо ставить его отдельно. А на маке не только баш есть, там кучу всего понапихали.
     
     
  • 3.64, cadmi (?), 22:39, 16/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Нет, не везде. В коммерческих UNIX баш обычно не ставится из коробки.
    > Про солярис сейчас точно не скажу, давно не работал, но в
    > AIX точно надо ставить его отдельно. А на маке не только
    > баш есть, там кучу всего понапихали.

    в варианте core install (с которого обычно и начинают ставить сервера), том, который мегабайт на 200, нет ни bash, ни zsh.

    а если ставить дополнительно (они оба лежат на диске), то разницы нет, pkgadd -d blabla SUNWzsh или pkgadd -d blabla SUNWbash.

    лично я всегда ставлю zsh :)

     
  • 2.42, Michael Shigorin (ok), 23:04, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > итого, вы голубчик промахнулись, протухло явно zsh.

    zsh-4.3 прекрасно работает. :) (а в bash4 кой-чего посломали по сравнению с 3.x, к сожалению)

     
     
  • 3.65, Аноним (-), 01:02, 17/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    И что же там сломали по сравнению с 3.х?
     
     
  • 4.66, Michael Shigorin (ok), 12:02, 17/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > И что же там сломали по сравнению с 3.х?

    ---
    Практически все скрипты на sh -u, которые используют $@ или $*, имеют
    отличные шансы сломаться при переезде с bash3 на bash4.
    --- http://lists.altlinux.org/pipermail/devel/2010-August/183727.html

    Тж.
    http://lists.altlinux.org/pipermail/devel/2010-August/183714.html
    http://lists.altlinux.org/pipermail/devel/2010-August/183852.html
    http://lists.altlinux.org/pipermail/devel/2010-August/183890.html

     
  • 2.45, Аноним (-), 05:02, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > + bash есть везде от Mac OS X до Solaris из коробки.

    На нормальных системах (FreeBSD) нет и не будет никогда.

    > Latest Stable release:     4.2.7  December 18, 2007

    Странно, откуда тогда а у меня

    zsh 4.3.10 (i386-portbld-freebsd8.1)

    > итого, вы голубчик промахнулись, протухло явно zsh.

    Система ваша протухла и мозги.

     
  • 2.48, Vitaly_loki (ok), 07:36, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Bash
    > Latest Stable release:  4.2  February 13, 2011
    > License: GPL 3
    > Z shell
    > Latest Stable release:  4.2.7  December 18, 2007
    > License: MIT-like
    > + bash есть везде от Mac OS X до Solaris из коробки.
    > итого, вы голубчик промахнулись, протухло явно zsh.

    В *BSD его нет из коробки

     
     
     
    Часть нити удалена модератором

  • 4.56, kshetragia (ok), 12:44, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Для таких умников хочется кнопку "минус пицотмильонов". Задолбали.
     

  • 1.20, pavlinux (ok), 19:16, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Указание отрицательного индекса массива теперь не приводит к ошибке
    > и воспринимается как обратное смещение от конца массива;

    Чую появление бесконечных циклов в старых скриптах.

     
     
  • 2.29, Andrey (??), 20:11, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А как Вариант ... Вы написали замену?
     
  • 2.38, Sw00p aka Jerom (?), 21:41, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    где это у вас такое ?

    вроде с первого класса проходят что индексы у массивов всегда положительные и начинаются с 0 или 1

     
     
  • 3.44, exn (??), 00:54, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >вроде с первого класса проходят что индексы у массивов всегда положительные и начинаются с 0 или 1

    с нуля

     
     
  • 4.58, Sw00p aka Jerom (?), 13:49, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    вы мало знакомы с языками
     
     
  • 5.59, exn (??), 20:37, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > вы мало знакомы с языками

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

    http://en.wikipedia.org/wiki/Zero-based_numbering

    как не трудно признавать но то что в lua с 1 не знал. но это маразм как и после -1 пойдет 1. и вообще у lua нет авторитета в этом вопросе, т.к язык создан для домохозяек и видимо по этой причине он такой.

     
     
  • 6.60, Sw00p aka Jerom (?), 21:42, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    пруф за пруф

    http://en.wikipedia.org/wiki/Off-by-one_error

     
  • 6.61, Sw00p aka Jerom (?), 21:44, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> вы мало знакомы с языками
    >  абалденный аргумент, в виду своей скромности скажу что повседневно использую 7
    >  различных языков только программирования, а вы?
    >  http://en.wikipedia.org/wiki/Zero-based_numbering
    >  как не трудно признавать но то что в lua с 1
    > не знал. но это маразм как и после -1 пойдет 1.
    > и вообще у lua нет авторитета в этом вопросе, т.к язык
    > создан для домохозяек и видимо по этой причине он такой.

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

     
  • 6.62, Sw00p aka Jerom (?), 21:48, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> вы мало знакомы с языками
    >  абалденный аргумент, в виду своей скромности скажу что повседневно использую 7
    >  различных языков только программирования, а вы?
    >  http://en.wikipedia.org/wiki/Zero-based_numbering
    >  как не трудно признавать но то что в lua с 1
    > не знал. но это маразм как и после -1 пойдет 1.
    > и вообще у lua нет авторитета в этом вопросе, т.к язык
    > создан для домохозяек и видимо по этой причине он так

    из вашего пруфа

    Older programming languages, such as Fortran or Cobol have array subscripts starting with one, because they were meant as high-level programming languages, and as such they had to have a correspondence to the usual ordinal numbers. Some recent languages, such as Lua, have adopted the same convention for the same reason.

    видимо вы не тока не знакомы вы даже внимательно прчитать не можете

     
  • 3.67, pavlinux (ok), 03:27, 22/02/2011 [^] [^^] [^^^] [ответить]  
  • +/

    2.16 Вот изящный трюк: если я пишу

    int realarray[10];
    int *array = &realarray[-1];,

    то теперь можно рассматривать "array" как массив, у которого индекс
    первого элемента равен единице.

    О:      Хотя этот прием внешне привлекателен (и использовался в старых
            изданиях книги "Numerical Recipes in С"), он не удовлетворяет
            стандартам С. Арифметические действия над указателями определены лишь
            тогда, когда указатель ссылается на выделенный блок памяти или на
            воображаемый завершающий элемент, следующий сразу за блоком. В
            противном случае поведение программы не определено, _даже если
            указатель не переназначается_. Код, приведенный выше, плох тем,
            что при уменьшении смещения может быть получен неверный адрес
            (возможно, из-за циклического перехода адреса при пересечении
            границы сегмента).

            Смотри: ANSI Разд.3.3.6 c. 48, Rationale Разд.3.2.2.3 c. 38;
            K&R II  Разд.5.3 c. 100, Разд.5.4 c. 102-3, Разд.A7.7 c. 205-6.

     

  • 1.47, Аноним (-), 05:14, 15/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >потому что кроме как ржать ты ни на что не способен.
    >http://zsh.sourceforge.net/FAQ/zshfaq01.html#l6

    любителям всё быстренько обосрать:
    ftp://ftp.zsh.org/pub/
    Файл:zsh-4.3.11.tar.bz2 2802 KB 20.12.2010

     
     
  • 2.52, Аноним (-), 09:25, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > любителям всё быстренько обосрать:
    > ftp://ftp.zsh.org/pub/
    > Файл:zsh-4.3.11.tar.bz2  2802 KB  20.12.2010

    А то, что ветка 4.3 помечена как unstable для разработчиков, вы конечно не заметили ?

     
     
  • 3.54, Анонимъ (?), 12:01, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Файл:zsh-4.3.11.tar.bz2  2802 KB  20.12.2010
    > А то, что ветка 4.3 помечена как unstable для разработчиков, вы конечно не заметили ?

    Я выше уже дал линк на официальный FAQ zsh (http://zsh.sourceforge.net/FAQ/zshfaq01.html#l6) . Но упёртые пользователи zsh настолько ленивы что не читают даже коротеньких FAQ по продукту который используют.

     
  • 3.57, kshetragia (ok), 12:48, 15/02/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Как бы вам уже донести до мозга, что некоторые unstable "продукты" работают стабильнее многих стабильных. Подозреваю, что если бы это был не zsh, а debian, то вы бы заткнулись.
     

  • 1.49, DRVTiny (??), 08:06, 15/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скажите, а что за бред про глобальные переменные:
    >Для команд declare/typeset добавлена новая опция "-g", при указании которой переменные имеют глобальную область видимости, т.е. видны даже в отдельных функциях;

    В BASH переменные, объявленные в основном коде будут видны во всех сложенных в него функциях, это по-моему вполне стандартное поведение любого языка программирования. Если же имелось в виду, что переменная, объявленная глобально внутри функции, будет видна везде (и в основном коде тоже), при этом сохраняя своё значение между вызывами функции, то это хорошо (хоть и не шибко сильно нужно, если не сказать больше), но тогда бы и написали об этом по-человечески.
    Насчёт сравнения zsh и bash - вы же всё-таки не забывайте о том, что речь идёт прежде всего о языке программирования shell, а не об удобствах оболочки. Безусловно, zsh как оболочка круче, в принципе пока что zsh опережает bash и как язык программирования (вот только скорость, что у bash, что у zsh ниже плинтуса), просто я не понимаю, причём здесь то, устанавливается где-то BASH по дефолту или нет, а уж особенно в контексте сравнения Linux и FreeBSD - с учётом того, что в последнем по дефолту вообще устанавливается довольно примитивная оболочка csh (название которой ИМХО говорит само за себя и полностью соответствует семантике встроенного языка).

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру