[sisyphus] bash

Alexey Tourbin at на altlinux.ru
Вт Авг 28 10:46:52 MSK 2012


On Tue, Aug 28, 2012 at 08:42:30AM +0300, Denis Kuznetsov wrote:
> Таки интересная ситуация...
> Согласно:
>     http://www.gnu.org/software/bash/manual/bashref.html#Quote-Removal
>     http://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
> А также:
>     $ shopt | grep extglob
>     extglob            on
> А еще:
>     $ ls +([0-9A-z])
>     $ rpm -qf $SHELL
>     bash-3.2.51-alt1
> Все укладывается в синтаксис bash-3.2.51 
> вошедшего в p6.
> 
> При проверке синтаксиса:
> $ echo 'ls +([0-9A-z])' | bash -n
> bash: line 1: syntax error near unexpected token `('
> bash: line 1: `ls +([0-9A-z])

Вы правы, это расширенный синтаксис:

$ echo 'ls +([0-9A-z])' |bash -n
bash: line 1: syntax error near unexpected token `('
bash: line 1: `ls +([0-9A-z])'
$ echo 'ls +([0-9A-z])' |bash -O extglob -n
$

Выходит что, к сожалению, выполнение текущей команды может влиять
на синтаксический разбор последующей команды - получается такой недо-перл
(в перле команды, модифицирующие синтаксис, выполняются безусловно, даже в
режиме syntax check).

Кстати, диапазон [A-z] является некорректным, но никто не жалуется.
То есть он к синтаксису не относится, а круглые скобки - относятся.
Интересно, как всё это вообще работает. :-)

> Возникает вопрос, как это обойти в Sisyphus и 
> p6?

Простого способа передать "-O extglob" в shell.req пока нету.
Можно избирательно отключить поиск зависимостей в проблемном скрипте:
%add_findreq_skiplist */usr/bin/zpool_layout
либо менее избирательно:
AutoReq: yes, noshell
Тогда часть зависимостей, если в скриптах есть самостоятельные
нетривиальные зависимости, нужно будет написать вручную.

> Эту же проблему наблюдаю на CentOS 6.1 и FreeBSD 
> (но они мне побоку).
> 
> 
> 28.08.2012 00:17, Dmitry V. Levin пишет:
> >On Mon, Aug 27, 2012 at 10:19:17PM +0300, Denis Kuznietsov wrote:
> >>27.08.2012 18:56, Alexey Tourbin пишет:
> >>>Копать туда, что shell syntax check у этого
> >>>скрипта не проходит:
> >>>
> >>>$ sh -n test.sh
> >>>test.sh: line 9: syntax error near unexpected token `('
> >>>test.sh: line 9: `            ls
> >>>${LABEL}-+([0-9a-f])-switch-port:${p}-slot:+([0-9]) \'
> >>>
> >>>Соответственно, rpm не дает запаковать
> >>>этот скрипт в абсолютно
> >>>неработающем виде, есть считается, что
> >>>это /bin/sh или /bin/bash скрипт.
> >>Да это баш. подозреваю что может даже 4-ка
> >Нет, вышепроцитированное не 
> >укладывается в синтаксис bash 4-й версии.


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