The OpenNET Project / Index page

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

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

08.01.2019 11:19

После двух с половиной лет разработки опубликована новая версия командного интерпретатора GNU Bash 5.0, используемого по умолчанию в большинстве дистрибутивов Linux. Одновременно состоялся релиз библиотеки readline 8.0, применяемой в bash для организации редактирования командной строки.

Значительное изменение номера версии Bash связано с внесением изменений, нарушающих обратную совместимость. В частности, в новой версии переработан код, связанный с обработкой ссылочных переменных nameref, что привело к отдельным изменениям поведения при использовании nameref (например, цикл разбора имён nameref внутри функций теперь приводит к определению переменных не в локальном, а в глобальном контексте). Кроме того, по умолчанию переменные BASH_ARGC и BASH_ARGV теперь выставляются только при включении расширенного отладочного режима, что позволило избавиться от проблем с производительностью при передаче скриптами большого числа аргументов. Для работы нового выпуска необходимо наличие свежей библиотеки readline, т.е. для установки Bash 5.0 в дистрибутивах с выпусками readline до 8.0 потребуется переустановка readline или встраивание новой версии библиотеки при сборке Bash.

Из ключевых улучшений можно отметить:

  • Предложены новые переменные окружения: BASH_ARGV0 (принимает значение $0), EPOCHSECONDS (эпохальное время в секундах) и EPOCHREALTIME (эпохальное время с точностью до микросекунд);
  • Во встроенную команду "history" добавлена поддержка выборочного удаления записей из БД с историей операций ("history -d start-end") и возможность указания отрицательных значений в качестве смещения первой удаляемой записи относительно конца списка (например, "-1" указывает на предыдущую команду);
  • Добавлена опция "localvar_inherit", при установке которой локальные переменные наследуют значение переменный с теми же именами, определёнными в вышестоящей области видимости;
  • Добавлена опция "assoc_expand_once", при установке которой оболочка осуществляет раскрытие индексов ассоциативных массивов только один раз;
  • Включена по умолчанию опция "globasciiranges", допускающая использование масок для определения диапазонов символов ([a-z]);
  • Добавлены встроенные реализации команд rm, stat, seq и fdflags;
  • Во встроенной команде "wait" обеспечена возможность ожидания замещения последнего процесса и добавлена опция "-f" для ожидания завершения процесса/работы вместо ожидания изменения состояния;
  • Добавлена возможность жёсткого определения в файле config-top.h значений $PATH и $HISTSIZE. Данные значения будут более приоритетными, чем значения из переменных окружения и могут применяться для создания ограниченных окружений;
  • При автодополнении ввода теперь не учитывается регистр символов для имён функций и псевдонимов (alias), если в readline выставлен режим completion-ignore-case;
  • Во встроенной команде "umask" разрешено использование режимов доступа и масок, превышающих восьмеричное значение 777;
  • Во встроенной команде "times" в зависимости от настройки локали теперь может выводиться не только точка, но и запятая в качестве разделителя дробных значений;
  • Добавлена отключенная по умолчанию и недокументированная опция "syslog_history" для включения отправки в syslog истории ввода команд;
  • Встроенная реализация malloc переведена на использование mmap для обеспечения запроса блоков, размером больше 128 Кб, и возможности возврата страниц памяти ядру после выполнения mfree;
  • В качестве индексов ассоциативных массивов теперь могут использоваться строки, состоящие только из символов пробела;
  • В разряд видимых переведены ранее недокументированные опции localvar_unset и progcomp_alias;
  • Переменная "$_" теперь не меняет своё значение, когда shell запускает команду, выполняющую fork.


  1. Главная ссылка к новости (http://lists.gnu.org/archive/h...)
  2. OpenNews: Релиз командного интерпретатора Bash 4.4
  3. OpenNews: В Bash выявлено ещё четыре уязвимости, эксплуатируемые через переменные окружения
  4. OpenNews: Релиз командного интерпретатора Bash 4.3
  5. OpenNews: Релиз командной оболочки zsh 5.1
  6. OpenNews: Выпуск командной оболочки fish 3.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49917-bash
Ключевые слова: bash, shell
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (121) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:27, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Во встроенной команде "umask" разрешено использование режимов доступа и масок, превышающих восьмеричное значение 777

    Просветите, пожалуйста, как umask может быть больше 777

     
     
  • 2.4, Аноним (4), 11:35, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Обнуляется
     
  • 2.7, Аноним (7), 11:42, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +8 +/
    01777
     
  • 2.19, Бананим (?), 12:46, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Видать, добавили поддержку Sticky bit, Set UID, Set GID, получилось 7777.
     
     
  • 3.45, Нанобот (ok), 15:18, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    как минимум, в линуксе это работать не будет
    в реализации системного вызова явно сбрасываются все биты старше 0777: https://github.com/torvalds/linux/blob/master/kernel/sys.c#L1816
     
     
  • 4.99, fi (ok), 11:32, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Скорей всего будет - пример не о том
     
  • 4.126, pavlinux (ok), 13:05, 10/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    builtins/common.c
    - read_octal: allow octal numbers greater than 777 to accommodate
      modes and umasks that include sticky/setuid/setgid bits. Report
      and fix from Martijn Dekker <martijn@inlv.org>




    /* Return the octal number parsed from STRING, or -1 to indicate
       that the string contained a bad number. */
    int
    read_octal (string)
         char *string;
    {
      int result, digits;

      result = digits = 0;
      while (*string && ISOCTAL (*string))
        {
          digits++;
          result = (result * 8) + (*string++ - '0');
          if (result > 07777)
    return -1;
        }

      if (digits == 0 || *string)
        result = -1;

      return (result);
    }


    Было        if (result > 0777)

     
     
  • 5.127, Аноним (127), 20:53, 10/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как верно подметил Нанобот, сисколл установки umask учитывает только 0777, так что от увеличения дополнительных бит в баше ничего не изменится.
     
     
  • 6.128, Нанобот (ok), 10:31, 12/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Как верно подметил Нанобот, сисколл установки umask учитывает только 0777, так что
    > от увеличения дополнительных бит в баше ничего не изменится.

    я подозреваю, что существует какая-то, отличная от линукс, система, в которой существует umask с другой реализацией и для которой тоже собирается баш. возможно где-то в *bsd...

     
  • 6.131, pavlinux (ok), 16:31, 14/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Как верно подметил Нанобот, сисколл установки umask

    umask в баше встроенный.




    int umask_builtin (list)   WORD_LIST *list; {...;}



     
     
  • 7.132, Нанобот (ok), 11:59, 23/01/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Как верно подметил Нанобот, сисколл установки umask
    > umask в баше встроенный.
    >


    > int umask_builtin (list)   WORD_LIST *list; {...;}
    >

    и внутри umask_builtin оно ж всё равно делает вызов ядра. а то иначе это будет бесполезная команда (например, пользователь поставит umask 022 и запустит какой-то процесс...если umask - чисто функция баша, то запущеный процесс не сможет узнать, что написал пользователь в другом процессе...чтобы оно работало так, как ожидается, нужно ядро вызывать).
    я думаю, если хорошо поискать, где-то внутри umask_builtin будет вызов ядра (ну или libc)

     
     
  • 8.133, Andrey Mitrofanov (?), 12:08, 23/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ойспадя https lists gnu org archive html bug-bash 2018-03 msg00083 html Так ... текст свёрнут, показать
     
     
  • 9.134, pavlinux (ok), 01:45, 25/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    While POSIX says the effect of specifying sticky setuid setgid bits is unspecifi... текст свёрнут, показать
     

  • 1.2, Аноним (2), 11:28, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +21 +/
    Астрологи объявили год поломанных скриптов.
     
     
  • 2.15, xm (ok), 12:06, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +18 +/
    > Астрологи объявили год поломанных скриптов.

    Говорила ж мама: "Пиши скрипты только на sh"...

     
     
  • 3.68, Michael Shigorin (ok), 19:11, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Это не помогает с дебиановским dash, вообще говоря.

    PS: и да, жду свидетелей двух башей в альте -- бегать по дистрибутивам и интересоваться, почему они ещё не на bash5.  Ну или завязывать с двухстандартностью.  Ну или оставаться лицемерами, да.

     
     
  • 4.86, xm (ok), 23:00, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    ССЗБ
     
  • 4.103, cat666 (ok), 13:08, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Миша, а как же Альт? Что-то ты всё про Debian, да про Debian.
     
     
  • 5.114, Michael Shigorin (ok), 16:01, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Миша, а как же Альт?

    https://bugzilla.altlinux.org/31399 CLOSED FIXED

     
  • 4.106, freehck (ok), 14:54, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это не помогает с дебиановским dash, вообще говоря.

    У Debian-а мейнтейнеров завались, там это как раз не проблема.

    > PS: и да, жду свидетелей двух башей в альте -- бегать по дистрибутивам и интересоваться, почему они ещё не на bash5.  Ну или завязывать с двухстандартностью.  Ну или оставаться лицемерами, да.

    Я так понимаю, через пару лет они будут свидетелями трёх башей в альте? )

     
  • 4.119, Аноним (119), 20:13, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Это не помогает с дебиановским dash, вообще говоря.

    В смысле не помогает? Он же вроде POSIX совместимый: dash is a POSIX-compliant implementation of /bin/sh that aims to be as small as possible.

     
     
  • 5.120, Michael Shigorin (ok), 20:17, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Сдаётся мне, полностью честно было бы s is aims to be вот здесь Глючный он м... большой текст свёрнут, показать
     
  • 3.91, Andrey Mitrofanov (?), 06:27, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Астрологи объявили год поломанных скриптов.
    > Говорила ж мама: "Пиши скрипты только на sh"...

    На котором из?  Впрочем geesh/gash порешают, да.

     
     
  • 4.97, Имя (?), 10:56, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    http://pubs.opengroup.org/onlinepubs/9699919799/idx/xcu.html
     
  • 4.98, Гентушник (ok), 11:06, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На том который описан в IEEE Std 1003.1, зачем завязываться на конкретный интерпретатор?
     
     
  • 5.104, Andrey Mitrofanov (?), 14:10, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    #>>>Говорила ж мама: "
    #>>> только на sh"...
    > На том который описан в IEEE Std 1003.1, зачем завязываться на конкретный
    > интерпретатор?

    Я ж про _реализацию_ спрашивал.

    Который из них  реализует этот вашЬ с[замечательный]й "POSIX shell"?  И чтоб не больше и не меньше?  И чтоб без ошибок в реализации и стандарте?

    Они все?  Ни один из?  '#!/bin/bash --posix'?

    Что Ваша мама вам _конкретно_ говорила-то???777  А _его_ мама _ему_?

    <///>

     
     
  • 6.105, Andrey Mitrofanov (?), 14:22, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Который из них  реализует этот вашЬ с[замечательный]й "POSIX shell"?  И
    > чтоб не больше и не меньше?

    Кстати, сразу, при выборе варианта -

    > Они все?

    , то исть писать _под все_ возможные реализации /bin/sh, написание скрипта превращается в сизифов камень-в-гору.

    Да, желание "позиксивистов" озадачить всех вокруг своими проблемами понятно, но совершенно непотребно.

    > <///>

    Приветы маме.

     
  • 6.123, Гентушник (ok), 21:11, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Я ж про _реализацию_ спрашивал.
    > Который из них  реализует этот вашЬ с[замечательный]й "POSIX shell"?

    Например bash --posix, да, или вызов баша через команду sh, большинство других шеллов предоставляющих /bin/sh делают так же. Если не делают, то пишите им в багтрекер.

    > чтоб не больше

    А почему не больше? Больше можно, стандарт не запрещает реализациям делать расширения синтаксиса.

    > и не меньше?

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

    > И чтоб без ошибок в реализации и стандарте?

    Извините Андрей, но ваши безошибочные программисты в другом замке.


     
     
  • 7.129, Andrey Mitrofanov (?), 08:44, 13/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >> чтоб не больше
    > А почему не больше? Больше можно, стандарт не запрещает реализациям делать расширения
    > синтаксиса.

    Я не знаю, почему вам двоим мамы (или мама? не братья?) запрещают в башизмы.  И вы остальным по ушам с этим фетишем ездите.  Стандпрт же ж вишь ты "не запрещает в расширения", ага.

     
  • 3.93, Dzivak (?), 09:17, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ksh очень хорош по совместимости
     
     
  • 4.100, fi (ok), 11:34, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Уйди! ты просто с ними не возился!

    их вообще два, и обычно в системе стоит старый.

     
  • 2.32, Аноним (32), 13:37, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что, скрипты настолько сложны, что трудно подправить?
     
     
  • 3.69, Michael Shigorin (ok), 19:11, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Бывают не столь сложны скрипты, сколь инварианты, особенно неявные.
     
  • 2.37, Аноним (37), 14:08, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Я о большей части перечисленного даже не слышал. Думается, большинство этих изменений даже не заметит.
     
     
  • 3.80, вандамм (?), 20:28, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    хвастаться собственной некомпетентностью - какой интересный вариант каминг аута.
     

  • 1.3, Qwerty (??), 11:30, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >Встроенная реализация malloc переведена на использование mmap для обеспечения запроса блоков

    О, а вот и пачка потенциальных уязвимостей и переполнений подъехала.

     
     
  • 2.9, Аноним (7), 11:44, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    А теперь расскажи, чем в плане переполнений аллокация через mmap хуже malloc/new (который сам обёртка над mmap/brk в большинстве libc).
     
     
  • 3.27, имя (?), 13:16, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А в каких аллокаторах, кроме, возможно, виндовых, malloc работает через что-то отличное от mmap/(s)brk?
     
     
  • 4.40, Аноним (40), 14:30, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В Винде всё точно так же, только вызов называется VirtualAlloc. Даже если задать огромную пустую секцию исполняемого файла и аллоцировать кучу там, внизу окажется отображение страниц.
     
  • 2.11, Аноним (11), 11:48, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это ровно то, что делается в других реализациях malloc.
     
     
  • 3.115, Аноним (127), 16:11, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А зачем башу своя реализация malloc?
     
     
  • 4.121, Аноним (119), 20:24, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Для оптимизации, упрощения отладки и улучшения их переносимости между различными системами.
     
  • 2.61, Сергей (??), 16:55, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Пихать внешние невалидированные данные в неизолированный баш это само по себе потенциальная уязвимость.
     

  • 1.5, Аноним (5), 11:37, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Без https по умолчанию раздавать файлы в наше время - жуткий моветон.

    // b.

     
     
  • 2.30, Аноним (30), 13:32, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    а еще говорят что шапка из фольги помогает при паранойи. попробуйте.
     
     
  • 3.48, Нанобот (ok), 15:23, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > а еще говорят что шапка из фольги помогает при паранойи. попробуйте.

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

     
     
  • 4.60, Аноним (60), 16:42, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > в последных прошивках излучателей используются особые радиоволны

    Так они и https пробивают на ура. Тут нужны другие подходы.

     
  • 3.72, Росатый (?), 19:28, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Нихрена она не помогает. Наоборот, излучение отражается от поверхности планеты и концентрируется под шапочкой.
     
  • 2.58, Аноним (58), 16:38, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Проверять подпись загруженного файла уже можно лет 20 как.
     
     
  • 3.63, Zulu (?), 17:09, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А md5 скачан с того же места без https. Угу.
     
     
  • 4.64, Аноним (60), 17:32, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Какая разница, откуда скачан md5, если проверять надо подпись?
     
     
  • 5.94, Аноним (94), 09:32, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А .sig-файл с подписью и открытый ключ для её проверки тоже скачаны по нешифрованному каналу, в том числе "с того же места без https". Угу.
     
     
  • 6.117, Аноним (117), 18:27, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ездить надо к автору лично ;)
     
  • 6.118, Michael Shigorin (ok), 18:33, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А .sig-файл с подписью и открытый ключ для её проверки тоже скачаны
    > по нешифрованному каналу, в том числе "с того же места без https". Угу.

    И зачем было городить инфраструктуру со всякими keys.gnupg.net, спрашивается...

     
     
  • 7.130, Andrey Mitrofanov (?), 08:47, 13/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >> А .sig-файл с подписью и открытый ключ для её проверки тоже скачаны
    >> по нешифрованному каналу, в том числе "с того же места без https". Угу.
    > И зачем было городить инфраструктуру со всякими keys.gnupg.net, спрашивается...

    Чтоб как с dns-ом было: быстро, удобно и не напрягая мозг. https://www.opennet.ru/opennews/art.shtml?num=49937

     
  • 6.122, Аноним (119), 20:30, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > А .sig-файл с подписью

    Это так же не имеет значения так как подпись проверяется ключом.

    > и открытый ключ для её проверки тоже скачаны по нешифрованному каналу

    А этого вы не знаете, это не из чего не следует и так же вы не знаете проверял ли пользователь подписи самого ключа и его отпечаток. Если он проверил ключ при получении, как того требуют правила — то всё будет в порядке и по HTTP.

     
  • 2.70, Michael Shigorin (ok), 19:13, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Расскажите это "зелёным", они Вам расскажут, что моветон -- делать свой вклад в глобальное потепление.  Ну а мы тут полюбуемся на два лагеря опирающихся всё больше на эмоции вместо рассуждения.
     

  • 1.6, Какаянахренразница (ok), 11:41, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ядро линукс 5.0, баш 5.0... Что к чему приурочили?
     
     
  • 2.13, Аноним (-), 11:57, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +8 +/
    К скорому выходу Librem 5.
     
     
  • 3.17, Аноним (40), 12:15, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > К скорому выходу Librem 5.

    С 5 понятно. А 0 к чему?

     
     
  • 4.28, Аноним (28), 13:29, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    символ бесконечного уроборуса. типа всё это фарэвэр
     
     
  • 5.39, Аноним (40), 14:22, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тепрь я спокоен. А то боялся, что выпустят 0 телефонов.
     

  • 1.10, Аноним (10), 11:46, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    модули до сих пор не завезли? нет нормального способа заинклудить другой файл (source гуляет от cwd, а не от dirname текущего файла, причем нужно учитывать, что текущий файл может быть симлинком на другой). А еще недавно обнаружил, что переменная $? всегда ноль, если результат сабшелла записывается в локальную переменную:

    $ my_func () { aaa=$(exit 1); echo $?; }
    $ my_func
    1
    $ my_func () { local aaa=$(exit 1); echo $?; }
    $ my_func
    0

    Язык бредовый, но тем не менее идеальный для запуска серии процессов, поэтому ругаю я его исключительно в духе "милые бранятся только тешатся" и не променяю его на всякие нескучные фишы

     
     
  • 2.26, Аноним (26), 13:13, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –8 +/
    > bash
    > язык

    Вы это серьёзно? Зачем что-то сложное писать на убогих скриптовых языках?

     
     
  • 3.36, Дартаньян (?), 14:00, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Напиши на "неубогом" языке скрипт восстановления реплики бд мускуля.
     
     
  • 4.53, А (??), 16:02, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Все так плохо, что это уже надо скриптовать? Поменяйте базу уже.
     
  • 3.56, Бананим (ok), 16:27, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Например, чтобы не встраивать интерпретатор какого-нибудь питона или руби докер-образ. А еще, чтобы все это потом могли поддерживать, т. к. баш мало-мальски знает любой юникс-админ.
     
  • 2.46, Аноним (60), 15:20, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > $ my_func () { local aaa=$(exit 1); echo $?; }

    Возможно, проблема в том, что $? относится к самому local (который выполнился успешно, так как значения переменным присвоены). А в первом случае оно относится к запускаемым командам независимо от того, используется ли их значение для чего-то или нет (например, для записи в переменную aaa).

     
  • 2.59, Аноним (58), 16:42, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > если результат сабшелла записывается в локальную переменную

    всё верно, потому что это результат команды local, раздели объявление локальных переменных и присвоение в них.

     
  • 2.62, zomg (?), 16:55, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Причина в том, что local -- это команда, а не часть синтаксиса. И ее код возврата всегда 0.
    Нелогично, но это так. Я сам был очень удивлен, когда первый раз напоролся на эту особенность.
     
  • 2.71, Michael Shigorin (ok), 19:17, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > source гуляет от cwd

    Нет.[CODE]
    $ which shell-error
    which: no shell-error in (/home/mike/bin:/usr/local/bin:/bin:/usr/bin:/usr/games)
    $ type shell-error
    shell-error is /bin/shell-error
    $ . shell-error
    $ fatal error
    bash: error
    [/CODE](кстати, альтовая libshell имени legion@ -- полезная библиотечка для тех, кто действительно пишет на шелле)

    PS (спасибо оппоненту):[CODE]$ pwd
    /home/mike[/CODE]

     
     
  • 3.81, Аноним (10), 21:06, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Да CODE tree include-me sh subdir include-me sh m... большой текст свёрнут, показать
     
     
  • 4.107, freehck (ok), 15:11, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты можешь разложить пакеты так, как тебе это заблагорассудится, а затем натравит... большой текст свёрнут, показать
     
  • 4.112, Michael Shigorin (ok), 15:41, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Нет В приведённом мной примере и впрямь стоило сразу показать, что стою не в ... большой текст свёрнут, показать
     
  • 2.124, Аноним (124), 22:01, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Почитайте уже http://mywiki.wooledge.org/BashPitfalls#local_varname.3D.24.28command.29 что ли, да и всё остальное в той же вики. Поможет избавиться от иллюзий о том, что скрипты на баше - это просто.
     

  • 1.16, Аноним (7), 12:08, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А pre- и post-exec так и приходится пилить либо патчами, либо очень неочевидно приседая.
     
     
  • 2.21, Аноим (?), 12:55, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    systemd твой друг
     
     
  • 3.67, Анонн (?), 19:03, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > systemd твой друг

    С такими друзьями и враги не нужны.

     
  • 3.111, Аноним (7), 15:30, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Да ты упрт!
    Причём тут системда, если мне нужна конструкция, которая позволяет выполнить свой код ПОСЛЕ нажатия пользователем кнопки ентер, но ДО выполнения введённой команды (ну и соответственно, другую команду после завершения пользовательского приложения, но ДО возврата управления пользователю)? Да, я хочу сделать себе нормальную history с синхронизацией, регэкспами и статистикой.
     
     
  • 4.113, Michael Shigorin (ok), 15:45, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Да, я хочу сделать себе нормальную history с синхронизацией, регэкспами и статистикой.

    Нууу... из перекликающихся задачек вспомнился LiLaLo -- вдруг подойдут тамошние изящные хаки (без изменения интерпретатора): http://xgu.ru/wiki/LiLaLo

    PS: вообще у Игоря немало ценной информации и красивых хаков (сюда он нынче порой пишет про заточенные под curl веб-сервисы, но ими далеко не ограничивается), кто не видел его вики и проекты -- очень рекомендую найти время глянуть хоть краем глаза.

    PPS: а про systemd -- может, это очередной скрипткидди пытался нас о чём-то предупредить?..

     

  • 1.18, Alukardd (ok), 12:31, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лучше бы двумерные массивы запилили уже, в конце-то концов.
     
     
  • 2.31, Аноним (31), 13:33, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Массивы размерностью больше 1 - зло.
     
     
  • 3.34, Какаянахренразница (ok), 13:44, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Массивы размерностью больше 1 - зло.

    Ы??? Очень неожиданное мнение. Можно получить и его обоснование?

     
     
  • 4.42, йкЛще (?), 14:47, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Запросто. Массивы с размерностью >1 не существуют.
     
     
  • 5.44, Alukardd (ok), 15:09, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Скажу по другому: я хочу сложные структуры данных. Так яснее?
     
     
  • 6.47, Аноним (60), 15:22, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > хочу сложные структуры данных

    Есть в питоне и перле, пользуйтесь.

     
  • 6.50, Имя (?), 15:26, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Возьми нормальный язык и не ремонтируй двигатель изолентой.
     
  • 6.95, Andrey Mitrofanov (?), 09:52, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Скажу по другому: я хочу сложные структуры данных. Так яснее?

    В 4.0 сделали local -n
    Передачу "по имени" можно пилить уже.

    Минус - в старых дебианах и рхелах не работает (это как раз к вопорсу про bash <-> язык).  Ну, и скрипты _таких_ объёмов становятся, что ... мысли про язык - приходят.

    ООП на башЕ.  :/  Упражнение в .... тщетности.


    Пишем:

    _rl_set_field() { #arg1- 'THIS', arg2- 'field', arg3- 'value'
        local -n vl="$3";  local fnm="$2"
        _set "$1" "$fnm" "$vl"
    .
    .
    .

    Зовём:

    release_read() { # arg1- 'THIS', stdin - ... => new THIS.[]
        local fld val tform

        while read fld; do
            val="$( _read_nlnl)"
            _rl_set_field "$1" "$fld" 'val'
        done < <( _gpg_signed_body| _release_unfold)
    }


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

     
  • 6.108, freehck (ok), 15:17, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Скажу по другому: я хочу сложные структуры данных. Так яснее?

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

    Тут уже выше рекомендовали Perl. Либо же рассмотрите любой другой язык по Вашему вкусу.

     

  • 1.20, Бананим (?), 12:51, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Интересно, в баше, когда-нибудь появится возможность возвращать из функции не только числа от 0 до 256? Для этого как минимум придется сделать исполнение функций не отдельным процессом, а потоком, но, вроде, других ограничений не вижу.
     
     
  • 2.22, Аноим (?), 12:58, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    func () {
    if что-то ; then
      echo "0"
    else
      echo "65535"
    fi
    }

    Пользуйся)

     
     
  • 3.25, Аноним (40), 13:12, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Видел точно такое же на С++
     
  • 3.57, Бананим (ok), 16:28, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Пользуюсь, но все же это костыль. Некрасиво.
     
  • 2.33, Annoynymous (ok), 13:37, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Из функции можно возвращать строку.

    Если речь про код выхода по команде exit, то там вообще 4 байта.

     
     
  • 3.38, Аноним (37), 14:11, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Из этих 4-х только один - код выхода процесса. И ограничение это не в bash, так что ответ на оригинальный вопрос - не будет этого никогда.
     
  • 2.75, Michael Shigorin (ok), 19:36, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > 256

    off-by-one

     
  • 2.96, Andrey Mitrofanov (?), 10:02, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Интересно, в баше, когда-нибудь появится возможность возвращать из функции не только числа
    > от 0 до 256? Для этого как минимум придется сделать исполнение
    > функций не отдельным процессом, а потоком, но, вроде, других ограничений не
    > вижу.

    С-слабак!

    1.
    _get() {  # 1- 'OBJ', 2- fld, 3- 'out' => rc &| $out
        local -n vv="$1" ou="$3";
        [ "${vv[$2]}" = "" ] && return 1
        ou="${vv[$2]}"; }
    2.
    declare -a ARR  # _new() и ...
    ARR['xyz']=abc  # ... _set() не поместились на полях этого форума.
    ARR['123']=389

    _get 'ARR' 'xyz' 'var1'
    _get 'ARR' 'xyz' 'var2'
    printf "var1=%1,  var2=%s\n" "$var1" "$var2"

    (Да, про 'строки возвращать' сказали уже.  Вот это оно и есть. Не через пайпы ж с подпроцессами их гонять! Р)

    См.также -> https://www.opennet.ru/openforum/vsluhforumID3/116249.html#95

     
  • 2.109, freehck (ok), 15:21, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Интересно, в баше, когда-нибудь появится возможность возвращать из функции не только числа от 0 до 256?

    Во-первых 255, во-вторых нет, не появится, потому как kernel/libc в вызове _exit рассматривает как код возврата только первый байт статуса.

     

  • 1.23, Anon4ik_ (?), 13:06, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Использую zsh, а для сборки пакетов держу dash.
     
     
  • 2.24, Злыдень (??), 13:11, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +15 +/
    Держите нас в курсе. Это так интересно.
     
     
  • 3.49, Аноним (60), 15:24, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –8 +/
    А мне интересно. Не всем же выбирать софт по официальным мануалам редхета.

    Плюсанул ему.

     
     
  • 4.52, Аноим (?), 16:00, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А, ну да. Навыбирают себе "софта" а потом на лезут на борды с такими головоломными вопросами, что сам Друзь офигеет
     
     
  • 5.55, А (??), 16:04, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Александр, перелогинтесь.
     
  • 5.65, Аноним (60), 17:36, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Навыбирают себе "софта" а потом на лезут на борды с такими головоломными вопросами

    Слушал бы таких, как вы, сидел бы сейчас на десяточке.

     
     
  • 6.110, freehck (ok), 15:23, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Навыбирают себе "софта" а потом на лезут на борды с такими головоломными вопросами
    > Слушал бы таких, как вы, сидел бы сейчас на десяточке.

    Только если "десяточка" -- это Debian Buster! :)

     

  • 1.29, Аноним (29), 13:31, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Тот редкий случай, когда на ЛОРе новость более полная.

    // b.

     
     
  • 2.41, Аноним (41), 14:39, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В переводе на LOR местами текст очень напоминает машинный перевод. В переводе на opennet выкинута куча малоинтересных мелочей, которые только распыляют внимание и мало кому интересны.
     

  • 1.43, Аноним (43), 14:57, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    BASHism improved...
     
  • 1.51, Techno1 (?), 15:28, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделали бы еще вывод истории команд с хронологией по дате....
     
     
  • 2.54, Аноим (?), 16:03, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Оно уже есть как бы. Переменную HISTTIMEFORMAT погуглите
     

  • 1.66, user90 (?), 18:49, 08/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Я пробовал написать на bash что-то типа менеджера паролей. Это возможно. Но как-то очень неприятно)) Ну я просто юзер, но в конце концов переписал на elisp. Но тоже не особо хорошо. Думаю в итоге переписать на Perl, это уже будет хоть что-то.Конечно можно бездумно юзать и встроенный в FF, до поры до времени))
     
     
  • 2.74, Anon4ik_ (?), 19:33, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Сейчас пихонеры тебя исправят.
     
  • 2.77, Michael Shigorin (ok), 19:39, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Я пробовал написать на bash что-то типа менеджера паролей.

    А чем именно не устроил каждый из существующей горы вроде pwsafe? (первый попавшийся под руку, не воспринимайте как рекомендацию!)

     
     
  • 3.78, user90 (?), 20:00, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я о нем не слышал)) Ок, учту.
     
  • 3.79, user90 (?), 20:17, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да и непонятно о каком pwsafe речь?
    Там есть автоматический выбор аккаунта для текущего отркрытого в фоксе домена? - Вероятно, нет.
    Есть автоматическая подстановка юзернейма/пароля в буфер обмена? - Тоже наверно нет. Так неудобно..
     
     
  • 4.89, ACCA (ok), 02:17, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это есть в KeePassX.

    С global shortcut не очень ровно в Wayland, но в остальном - вполне рабочая штука.

     
  • 2.82, OpenEcho (?), 21:15, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    http://kpcli.sourceforge.net/
    ?
     
     
  • 3.84, user90 (?), 21:31, 08/01/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да хоть fpm2. Был, но так же слишком просто ;)
     
     
  • 4.116, OpenEcho (?), 16:16, 09/01/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    kpcli совместим с KeePass в отличие от fpm2 и прочих, а это значит что синхронизация файла мэнеджера паролей будет работать практически на всех платформах, - андроид, яблоко, венда, все юникс подобные ОСи и даже на старой нокии из под джавы.
     
  • 2.125, user455 (?), 10:42, 10/01/2019 [^] [^^] [^^^] [ответить]  
  • +/
    менеджер паролей на bash - pass . очень хороший менеджер паролей.
     

  • 1.101, fi (ok), 11:35, 09/01/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что только не придумают чтоб не использовать прекрасный perl!
     

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



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

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