On Wed, May 26, 2004 at 02:51:23PM +0400, Dmitry V. Levin wrote: > > %NotRequires perl(warnings.pm) libz.so.1 > > %NotProvides perl(PerlIO/gzip.pm) > - имена странные Для сравнения. В MDK нужно писать: %define _requires_exceptions 'perl(warnings.pm)' libz.so.1 В PLD нужно писать: %define _noautoreq 'perl(warnings.pm)' libz.so.1 По сравнению с MDK/PLD суть моих предложений в следующем: - удобнее писать не %define, а использовать готовый макрос, семантика которого очевидна из названия - удобнее использовать shell patterns, а не `grep -v' - удобнее использовать автоматическое кворитрование аргументов, передаваемых скрипту Т.е. получается больше похоже на тэги Requires и Provides, что кажется мне более естественным. > - так на shellе не пишут: > strings=`"$@"` > echo "$strings" | while read string; do Я уже запутался, в каком порядке происходят substitutions, word splitting и т.д., как это связано с субшеллами, backticks, embedded newlines и т.п. Заодно узнал, что в bash субшелл порождается для _правой_ части пайпа, а левая часть пайпа остается работать в текущем шелле. (В zsh это работает с точностью до наоборот.) Поэтому в bourne shell не работает такой очевидный, казалось бы, код: echo "$strings" | while read string; do match= echo "$patterns" | while read pattern; do if [ -z "${string##$pattern}" ]; then match=1 break fi done if [ -z "$match" ]; then echo "$string" fi done Т.е. match=1 устанавливается в дочернем процессе, а по команде break субшелл радостно прекращает свою работу. Чево только не узнаешь. :) > -- > ldv