Quebra seu $@
entre aspas duplas, assim:
php "$@"
O que está acontecendo é que os argumentos para php-wrapper
são -r
e echo "Works";
, o que é bom. No entanto, como $@
não é citado, todos os argumentos php-wrapper
receive são analisados como palavras separadas, portanto php
está sendo passado -r
, echo
e "Works"
. Com aspas duplas $@
, php
serão passadas -r
e echo "Works"
.
Na página de manual bash
:
@ Expands to the positional parameters, starting from one. When
the expansion occurs within double quotes, each parameter
expands to a separate word. That is, "$@" is equivalent to "$1"
"$2" ...
Aqui está um pequeno script que eu uso quando a análise de argumentos não está acontecendo do jeito que eu quero:
$ cat echoargs
#!/bin/bash --
count=0
for i in "$@"
do
echo "$count: $i"
((count++));
done
Altere seu script de wrapper para:
echoargs $@
echo ====
echoargs "$@"
e tente várias invocações do wrapper para ver o que está passando.