Bug 33532 - Ошибка "too many arguments" скрипта shebang.req
Summary: Ошибка "too many arguments" скрипта shebang.req
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL: http://git.altlinux.org/people/pauli/...
Keywords:
Depends on:
Blocks:
 
Reported: 2017-06-07 12:58 MSK by Pavel Isopenko
Modified: 2019-10-24 17:26 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Pavel Isopenko 2017-06-07 12:58:31 MSK
Finding Requires (using /usr/lib/rpm/find-requires)
Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.NhZae3
find-requires: running scripts (cpp,debuginfo,files,lib,pam,perl,pkgconfig,pkgconfiglib,python,python3,rpmlib,shebang,shell,static,symlinks)
shebang.req.files: executable script /usr/src/tmp/egroupware-buildroot/usr/share/egroupware/api/asyncwrapper.php is not executable
shebang.req: ERROR: /usr/src/tmp/egroupware-buildroot/usr/share/egroupware/setup/setup-cli.php: too many arguments: #!/usr/bin/env php -qC
find-requires: ERROR: /usr/lib/rpm/shebang.req failed
error: /bin/sh failed
error: Failed to find Requires
Comment 1 Dmitry V. Levin 2017-06-07 13:01:32 MSK
Перевожу: в шебанге у команды может быть не более одного аргумента, а у вас их там два.
Comment 2 Dmitry V. Levin 2017-06-07 13:03:54 MSK
продолжаю переводить: shebang.req нашёл в вашем скрипте setup-cli.php ошибку, которую следует исправить.
Comment 3 Pavel Isopenko 2017-06-07 13:23:18 MSK
Это не мой скрипт, это апстримный php код. Похоже что в апстримном репо Windows-код. Хорошо, посмотрю как вопрос решили в других Linux-дистрибутивах. Вопрос закрыт.
Comment 4 Ivan Zakharyaschev 2017-06-08 15:19:16 MSK
Да, так работать не будет. Это аналогично такому вызову (в смысле разбиения на аргументы):

[imz@ovicaa ~]$ env 'tail -f' /dev/null
env: tail -f: No such file or directory
[imz@ovicaa ~]$ tail -f /dev/null
^C
[imz@ovicaa ~]$ type env
env is hashed (/usr/bin/env)
[imz@ovicaa ~]$ rpm -qf /usr/bin/env
coreutils-8.24.0.40.c1dba-alt1
[imz@ovicaa ~]$ cat > test-env-shebang
#!/usr/bin/env tail -f
hi
[imz@ovicaa ~]$ chmod a+x test-env-shebang 
[imz@ovicaa ~]$ ./test-env-shebang 
/usr/bin/env: tail -f: No such file or directory
[imz@ovicaa ~]$ 

В конце я явно проверил поведение в shebang-е.

Это легко переписать. Например, без env.
Comment 5 Pavel Isopenko 2017-06-08 16:39:21 MSK
Собственно, разобрались. Всё верно, это не проблема rpm-build. (en.wikipedia.org/wiki/Shebang_(Unix)) "The optional argument should either not be included or it should be a string representing a single argument."
Single. 
Или второй аргумент в данном случае попросту не имеет значения, иначе никак не объяснить такую конструкцию в стабильной ветке приложения. Посмотрел в пакетах для SUSE - так и есть, никто ничего не менял. Или Ralf Becker (автор EGroupware) сам одумается, или придётся намекнуть, или (%add_findreq_skiplist *.php) игнорируем.
Comment 6 Ivan Zakharyaschev 2017-06-08 16:47:55 MSK
(In reply to comment #5)
> Или второй аргумент в данном случае попросту не имеет значения, иначе никак не

Нет, если ядро как у нас (и, наверное, у многих), он имеет значение, а именно сливается в одну строку. И это не работает. Я это продемонстрировал в примере выше.

> объяснить такую конструкцию в стабильной ветке приложения. Посмотрел в пакетах
> для SUSE - так и есть, никто ничего не менял. Или Ralf Becker (автор
> EGroupware) сам одумается, или придётся намекнуть, или (%add_findreq_skiplist
> *.php) игнорируем.

Ничего хорошего в том, чтобы игнорировать то, что в принципе не работает, не вижу. Проще пропатчить, убрав env.

Зачем игнорировать?.. лучше выкинуть целиком или поправить.
Comment 7 Vitaly Lipatov 2019-10-24 11:04:57 MSK
Хорошо, а как вы прокомментируете такой параметр:
$ env --help | grep -A2 -- -S
  -S, --split-string=S       обработать и разделить S на отдельные аргументы;
                             используется для указания нескольких аргументов
                             в строках с #!

с примером из man env:
#!/usr/bin/env -S perl -w -T
              ...

       Will execute perl -w -T 1.pl .

который не работает:
shebang.req: ERROR: /usr/src/tmp/korinf-buildroot/usr/share/eterbuild/korinf/helpers/send_via_pyxmpp.py: too many arguments: #!/usr/bin/env -S python3 -u
Comment 8 Ivan Zakharyaschev 2019-10-24 17:26:20 MSK
(In reply to comment #7)
> Хорошо, а как вы прокомментируете такой параметр:
> $ env --help | grep -A2 -- -S
>   -S, --split-string=S       обработать и разделить S на отдельные аргументы;
>                              используется для указания нескольких аргументов
>                              в строках с #!
> 
> с примером из man env:
> #!/usr/bin/env -S perl -w -T
>               ...
> 
>        Will execute perl -w -T 1.pl .
> 
> который не работает:
> shebang.req: ERROR:
> /usr/src/tmp/korinf-buildroot/usr/share/eterbuild/korinf/helpers/send_via_pyxmpp.py:
> too many arguments: #!/usr/bin/env -S python3 -u

Новая фича в coreutils.

Можно и новый feature request на rpm-build завести.