----с.sh-------- while read a; do echo "[$a]" done /----с.sh-------- echo "фс" | ash ./c.sh [ф�] ----------------- echo "фс" | sh ./c.sh [фс]
Это regression, ash-0.5.5.1-alt5 из 5.1 букву "с" не теряет. Ошибка была найдена при помощи strace, который показал, что половина буквы "с" теряется во время read.
Виноват тот патч, который я ревертил в ash-0.5.5.1-alt5.
(In reply to comment #2) > Виноват тот патч, который я ревертил в ash-0.5.5.1-alt5. Можно это как-нибудь быстро исправить, или проще отказаться от ash везде, где используется read?
Быстро исправить нельзя, можно сломать ещё хуже. В debian и тем более в других дистрах патчей на эту тему нет. Варианта три: 1. Отказывайтесь от использования dash; 2. Откатываем dash на тот момент, когда патч можно было откатить, но получаем другие баги; 3. Не спешно исправляем или ждём исправления в апстрим.
Дублирую сюда. Ошибка локализована до коммита. Осталось понять, что в нём так ломает read. У меня есть предположение.
http://git.altlinux.org/people/legion/packages/ash.git?p=ash.git;a=blob;f=src/miscbltin.c;h=653c92f4381a0e1aecec131b3680f6869ca1e253;hb=49a94e2bab1e4f601a9fbdf9615d9e4e0150e412#l121 до вызова rmescapes() символ нормальный, после битый.
Исправить можно. f8231aea37e921492fc7fbd972385ab5b90e8627 на ту же тему, но в другом месте.
Created attachment 4819 [details] 0001-BUILTIN-Fix-corruption-of-reads-with-byte-0x81.patch Думаю, что раз до коммита 55c46b dash не занимался удалением CTLESC в read, то можно спокойно убрать эту операцию из read.
ash-0.5.6-alt1.20110216 -> sisyphus: * Thu Feb 24 2011 Alexey Gladkov <legion@altlinux> 0.5.6-alt1.20110216 - New release (0.5.6) and update from upstream git. - This build provides the following fixes: + Fix corruption of readcmd with byte 0x81 (ALT#25090).
*** Bug 24483 has been marked as a duplicate of this bug. ***