On Sat, Sep 08, 2007 at 09:50:46PM +0300, Michael Shigorin wrote: > On Sat, Sep 08, 2007 at 07:49:15PM +0400, Alexey Tourbin wrote: > > Кто интересуется автоматическим поиском зависимостей, > > советую склонировать этот пакет и запустить gear --rpm -- rpm -bb > > Ну и ясное дело изучить зависимости собравшегося пакета. > > Прикольненько =) В шелле есть word splitting, после которого автоматически выполняется глоб (не помню как это по-научному называется). Отделить одно от другого более-менее нельзя. $ files='/lib/libc-* /lib/libpthread-*' $ for f in $files; do echo "$f"; done /lib/libc-2.5.so /lib/libpthread-2.5.so $ Это фактически значит, что переменную с untrusted data нельзя писать без кавычек, иначе, помимо желаемого разбиения на слова также будет сделан глоб. Единственный способ не делать глоб -- это запускать скрипты в режиме -f ("#!/bin/sh -f" или "set -f"). Кстати, в zsh ни word splitting, ни глоб по умолчанию не выполняются, так что переменные вообще квотить не нужно. А splitting или глоб нужно специально просить, тот или другой, или оба вместе. Кстати щас возможностей для подтасовок слишком много. $ cat test.sh \ a ' a' $ sh --rpm-requires test.sh executable(\ a) executable(' a') $ /usr/lib/rpm/shell.req test.sh shell.req: /home/at/test.sh: ' not found (skip) shell.req: /home/at/test.sh: a' not found (skip) shell.req: /home/at/test.sh: \ not found (skip) shell.req: /home/at/test.sh: a not found (skip) $ Думаю как бы накрыть всё это разом. Кажется, как следует сделать всё равно ничего не получится. Но хотя бы отсечь заведомо дурные варианты.