Дайте макросу RPM аргумент с пробелами

Пример макроса RPM:

%define hello() \
    printf 'hello, %{1}.\\n';

Я хотел бы иметь возможность дать ему макросы с пробелами, например:

%{hello "Dak Tyson"}

->

printf 'hello, Dak Tyson.\n'

Тем не менее, он продолжает делать это:

%{hello "Dak Tyson"}

->

printf 'hello, "Dak.\n'

Другими словами, он не интерпретирует двойные кавычки, а использует их как есть.

Одинарные кавычки тоже не работают:

%{hello 'Dak Tyson'}

->

printf 'hello, 'Dak\.\n'

Ни обратной косой черты:

%{hello Dak\ Tyson}

->

printf 'hello, Dak\.\n'

Без брекетов:

%{hello {Dak Tyson}}

->

printf 'hello, {Dak.\n'

Можно ли указать аргументы макроса RPM с пробелами?


person djhaskin987    schedule 15.10.2013    source источник


Ответы (1)


Я просмотрел код RPM API C, связанный с расширение макроса. Я нашел там цикл, который использует пробелы для разбора аргументов, и (я думаю) нет никакого способа обойти этот цикл. Я не думаю, что вы можете приводить аргументы с пробелами.

Однако я обнаружил, что аргументы макросов безопасны.

Мой .rpmmacros файл:

%hello() '%{1}'
%name Dak Tyson

С указанными выше макросами эта команда:

rpm --eval '%{hello %{name}}'

дает:

'Dak Tyson'

Так что, если мне действительно нужны пробелы в определениях моих макросов, я могу сначала определить их как макросы.

Кстати, я также обнаружил, что вложенные параметризованные макросы не работают.

Эта команда:

rpm --eval '%{hello %{hello name}}'

дает:

error: Unterminated {: {hello
  2<     (empty)
  1<   (empty)
  0< '
'
person djhaskin987    schedule 15.10.2013
comment
IJWTS благодарит вас за то, что вы прочитали исходный код RPM, так что мне не пришлось этого делать. - person Matt Rose; 18.11.2015