[sisyphus] Про взаимодействие bash с внешней libreadline

Anton Gorlov stalker на altlinux.ru
Чт Дек 19 14:36:40 MSK 2013


кстати не помогло. Взял libreadline5 из сизифа.. поставил онное.. в 
выводе export нету col/row а на растягивание консоли или уменьшение ни 
mc ни irssi не реагируют

17.12.2013 04:48, Dmitry V. Levin пишет:
> On Mon, Dec 16, 2013 at 08:16:23PM +0400, Sergey Vlasov wrote:
>> На самом деле, возможно, это баг в bash (точнее, во взаимодействии bash с
>> внешней библиотекой libreadline).
>>
>> Дело в том, что в libreadline есть функция sh_set_lines_and_columns(),
>> которая как раз и добавляет в окружение текущего процесса переменные LINES
>> и COLUMNS:
>>
>>    http://git.altlinux.org/gears/r/readline.git?p=readline.git;a=blob;f=readline/shell.c;h=346f8113d43d742191f34f431d55e94316e4431d;hb=bc8ee94c5760cc286148d7ab25f2606c0eeeb52a#l121
>>
>> Однако ближе к началу файла shell.c есть следующий комментарий:
>>
>>   88 /* All of these functions are resolved from bash if we are linking readline
>>   89    as part of bash. */
>>
>>    http://git.altlinux.org/gears/r/readline.git?p=readline.git;a=blob;f=readline/shell.c;h=346f8113d43d742191f34f431d55e94316e4431d;hb=bc8ee94c5760cc286148d7ab25f2606c0eeeb52a#l88
>>
>> И действительно, в самом bash тоже определяется функция
>> sh_set_lines_and_columns():
>>
>>    http://git.altlinux.org/gears/b/bash.git?p=bash.git;a=blob;f=bash/variables.c;h=1c782534e22d77e492cb66cad6d8666c9a911e23;hb=ab284e13150cb2edf3345256c6ddd919babf3a24#l864
>>
>> В отличие от реализации в libreadline, функция из bash использует не
>> setenv(), а внутреннюю функцию bash bind_variable(), которая устанавливает
>> внутреннюю переменную shell, по умолчанию не экспортирующуюся в дочерние
>> процессы; именно такое поведение можно наблюдать сейчас в zsh - в скриптах
>> можно использовать переменные $LINES и $COLUMNS, но zsh не передаёт эти
>> переменные другим процессам, если не выполнить export явно.
>>
>> Однако в ALT пакеты bash и libreadline собраны таким образом, что при
>> вызове sh_set_lines_and_columns() из функций libreadline всегда вызывается
>> реализация этой функции внутри libreadline - перекрытие её реализацией из
>> bash, предполагавшееся разработчиками, не выполняется.
> Вот уж действительно peculiar design.
>
> Видимо, придется превратить все функции sh_*, определенные в файле
> readline/shell.c, в weak alias'ы, и экспортировать их из libreadline.
> Другого способа реализовать задуманное автором перекрытие функций
> при использовании динамической линковки с libreadline я не вижу.
>
> http://git.altlinux.org/tasks/110622/
>
>
>
>
> _______________________________________________
> Sisyphus mailing list
> Sisyphus на lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/sisyphus

----------- следующая часть -----------
Вложение в формате HTML было удалено...
URL: <http://lists.altlinux.org/pipermail/sisyphus/attachments/20131219/ad604062/attachment.html>


Подробная информация о списке рассылки Sisyphus